*IF DEF,CONTROL                                                            GET_NAM2.2      
C ******************************COPYRIGHT******************************    GTS2F400.3367   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.3368   
C                                                                          GTS2F400.3369   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.3370   
C restrictions as set forth in the contract.                               GTS2F400.3371   
C                                                                          GTS2F400.3372   
C                Meteorological Office                                     GTS2F400.3373   
C                London Road                                               GTS2F400.3374   
C                BRACKNELL                                                 GTS2F400.3375   
C                Berkshire UK                                              GTS2F400.3376   
C                RG12 2SZ                                                  GTS2F400.3377   
C                                                                          GTS2F400.3378   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.3379   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.3380   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.3381   
C Modelling at the above address.                                          GTS2F400.3382   
C ******************************COPYRIGHT******************************    GTS2F400.3383   
C                                                                          GTS2F400.3384   
CLL  Routine: GET_NAME -------------------------------------------------   GET_NAM2.3      
CLL                                                                        GET_NAM2.4      
CLL  Purpose: Generates an output file name of up to 14 characters using   GET_NAM2.5      
CLL           the defined file naming convention, taking account of        GET_NAM2.6      
CLL           file type, validity time, etc.                               GET_NAM2.7      
CLL           Obeys new filenaming convention introduced at version 2.7.   GET_NAM2.8      
CLL                                                                        GET_NAM2.9      
CLL  Tested under compiler:   cft77                                        GET_NAM2.10     
CLL  Tested under OS version: UNICOS 6.1.5A                                GET_NAM2.11     
CLL                                                                        GET_NAM2.12     
CLL  Author:   R A Stratton                                                GET_NAM2.13     
CLL                                                                        GET_NAM2.14     
CLL  Model            Modification history from model version 3.0:         GET_NAM2.15     
CLL version  Date                                                          GET_NAM2.16     
CLL   3.1  27/01/93 : correct error in 2 character months - change jan     RS270193.1      
CLL                   from jn to ja so that no clash with june.            RS270193.2      
CLL  3.1 2/02/93 : added comdeck CHSUNITS to define NUNITS for i/o         RS030293.99     
CLL                                                                        GET_NAM2.17     
CLL   3.1  22/02/93 : Cater for filename changes for boundary datasets.    DR240293.588    
CLL                   FILETYPE=u-z for LAM areas 1-6. D. Robinson          DR240293.589    
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.60     
CLL                   portability.  Author Tracey Smith.                   TS150793.61     
CLL   3.2  15/04/93  Correct Y_HUNDS in Absolute_long convention (TCJ).    TJ150493.1      
CLL   3.2  08/07/93  Correct 1 T/S offset in reinit'ed pp names  (TCJ).    TJ150493.2      
CLL   3.3  08/02/94  Modify calls to TIME2SEC/SEC2TIME to output/input     TJ080294.477    
CLL                  elapsed times in days & secs, for portability. TCJ    TJ080294.478    
CLL   3.4  17/06/94  Argument LCAL360 added and passed to SEC2TIME         GSS1F304.332    
CLL                                                        S.J.Swarbrick   GSS1F304.333    
CLL  4.1  30/07/96  Introduce Wave sub-model.  M Holt                      WRB1F401.1174   
!LL  4.4  11/07/97  Allow character filenames for PP files                 GMG1F404.111    
!LL                 reinitialised on real month boundaries.  M Gallani     GMG1F404.112    
!LL  4.5  29/07/98  New naming convention for reinitialised boundary       GDR2F405.158    
!LL                 files. D. Robinson.                                    GDR2F405.159    
CLL                                                                        TJ080294.479    
CLL  Programming standard: UM Doc Paper 3, version 1 (15/1/90)             GET_NAM2.18     
CLL                                                                        GET_NAM2.19     
CLL  Logical components covered: S51                                       GET_NAM2.20     
CLL                                                                        GET_NAM2.21     
CLL  Project task: S51                                                     GET_NAM2.22     
CLL                                                                        GET_NAM2.23     
CLL  External documentation: UM documentation paper 7 - Filenaming         GET_NAM2.24     
CLL                          conventions for the Unified Model             GET_NAM2.25     
CLL                                                                        GET_NAM2.26     
CLL  -------------------------------------------------------------------   GET_NAM2.27     
C*L  Interface and arguments: ------------------------------------------   GET_NAM2.28     
C                                                                          GET_NAM2.29     

      SUBROUTINE GET_NAME(EXPT_ID,JOB_ID,ISUBMODEL,MEANLEV,TOGGLE,          13,6GET_NAM2.30     
     *          REINIT_STEPS,FILETYPE,LETTER_3, MODEL_STATUS,              GET_NAM2.31     
     *     TIME_CONVENTION,ANALYSIS_HRS,FILENAME,ICODE,CMESSAGE,           GSS1F304.334    
     *     LCAL360)                                                        GSS1F304.335    
C                                                                          GET_NAM2.33     
      IMPLICIT NONE                                                        GET_NAM2.34     
      LOGICAL LCAL360                                                      GSS1F304.336    
C                                                                          GET_NAM2.35     
      CHARACTER*4   EXPT_ID     ! IN  - Experiment ident or alias          GET_NAM2.36     
      CHARACTER*1   JOB_ID      ! IN  - Job ident within experiment        GET_NAM2.37     
      INTEGER       ISUBMODEL   ! IN  - Submodel indicator                 GET_NAM2.38     
      INTEGER       MEANLEV     ! IN  - Mean level indicator               GET_NAM2.39     
      INTEGER       TOGGLE      ! IN  - Alternately 1/2 for partial sums   GET_NAM2.40     
      INTEGER       ANALYSIS_HRS! IN  - Hrs from basis time to analysis    GET_NAM2.41     
      INTEGER       REINIT_STEPS! IN  - timesteps between file reinit-     GMG1F404.113    
!                                      ialisation for non-mean pp files    GMG1F404.114    
!                                      or -ve for Gregorian reinit.        GMG1F404.115    
                                                                           GET_NAM2.44     
      CHARACTER*1   FILETYPE    ! IN  - Code for file type                 GET_NAM2.45     
      CHARACTER*1   LETTER_3    ! IN  - character for use in position 9    GET_NAM2.46     
C                                       of non-mean pp files.              GET_NAM2.47     
      CHARACTER*14  MODEL_STATUS! IN  - Operational/NonOperational         GET_NAM2.48     
C                                                                          GET_NAM2.49     
      CHARACTER*17  TIME_CONVENTION ! IN  - Relative/Timestep/             GET_NAM2.50     
C                                       Absolute_standard/Absolute_long/   GET_NAM2.51     
C                                       Absolute_short                     GET_NAM2.52     
      CHARACTER*14  FILENAME    ! OUT - Generated file name                GET_NAM2.53     
      INTEGER ICODE             ! OUT - Error return code                  GET_NAM2.54     
      CHARACTER*80 CMESSAGE                                                TS150793.62     
C                                                                          GET_NAM2.56     
C*----------------------------------------------------------------------   GET_NAM2.57     
C  Common blocks                                                           GET_NAM2.58     
C                                                                          GET_NAM2.59     
*CALL CMAXSIZE                                                             GDR3F305.205    
*CALL CSUBMODL                                                             GDR3F305.206    
*CALL CNTLGEN                                                              GDR3F305.207    
*CALL CTIME                                                                GDR3F305.208    
C                                                                          GET_NAM2.63     
C External subroutines called                                              GET_NAM2.64     
C                                                                          GET_NAM2.65     
      EXTERNAL SEC2TIME,DAY2CHAR,STP2TIME                                  TJ080294.480    
C                                                                          GET_NAM2.67     
C  Local variables                                                         GET_NAM2.68     
C                                                                          GET_NAM2.69     
      INTEGER                                                              GET_NAM2.70     
     & YYYY,MM,DD,HH,IMIN,ISEC   ! Current time values for filename        GET_NAM2.71     
      INTEGER     COUNT,         ! Counter for steps or hours              GET_NAM2.72     
     &            DAYNO,         ! day number                              GET_NAM2.73     
     &            DAYS,          ! Number of days for period               GET_NAM2.74     
     &            HOURS,         ! Number of hours for period              GET_NAM2.75     
     &            I,             ! loop counter                            GET_NAM2.76     
     &            STEPS          ! number of steps                         GET_NAM2.77     
      INTEGER     END_DAYS       ! number of whole days from run start     TJ080294.481    
      INTEGER     END_SECONDS    ! number of extra secs from run start     TJ080294.482    
      INTEGER     MON            ! month for mean period                   GET_NAM2.79     
      INTEGER     A_STEPS_PER_HR    ! steps per hour for atmos sub-model   GDR3F305.209    
C                                                                          GET_NAM2.80     
      CHARACTER*2 QW             ! Operational file prefix                 GET_NAM2.81     
C                                                                          GET_NAM2.82     
      CHARACTER*1 SUBMODEL_ID    ! character for model a or o              GET_NAM2.83     
      CHARACTER*1 FILETYPE_2     ! letter after FILETYPE in name           GET_NAM2.84     
      CHARACTER*1 MEAN_PERIOD(4) ! default letter for mean period          GET_NAM2.85     
C                                                                          GET_NAM2.86     
      CHARACTER*1 Y_HUNDS        ! Character year identifier (hundreds)    GET_NAM2.87     
      CHARACTER*1 Y_TENS         ! Character year identifier (tens)        GET_NAM2.88     
      CHARACTER*1 Y_UNITS        ! Character year identifier (units)       GET_NAM2.89     
      CHARACTER*1 M              ! Character month identifier              GET_NAM2.90     
      CHARACTER*1 D              ! Character day-of-month identifier       GET_NAM2.91     
      CHARACTER*1 H              ! Character hour identifier               GET_NAM2.92     
      CHARACTER*1 HUNDREDS       ! Character for hundreds counter          GET_NAM2.93     
      CHARACTER*1 TENS           ! Character for tens counter              GET_NAM2.94     
      CHARACTER*1 UNITS          ! Character for units counter             GET_NAM2.95     
      CHARACTER*1 CHAR_ID(36)    ! Valid characters for above (lookup)     GET_NAM2.96     
      CHARACTER*1 SEPARATOR      ! character used as separator in name     GET_NAM2.97     
      CHARACTER*1 STYLE          ! style of date in filename               GET_NAM2.98     
      CHARACTER*3 CDAYNO         ! character day number                    GET_NAM2.99     
      CHARACTER*3 MONTH_3CHAR(12)! 3 character month identifier            GET_NAM2.100    
      CHARACTER*2 MONTH_2CHAR(12)! 2 character month identifier            GET_NAM2.101    
      CHARACTER*3 SEASON_3CHAR(12)! 3 character season identifier          GET_NAM2.102    
      CHARACTER*2 SEASON_2CHAR(12)! 2 character season identifier          GET_NAM2.103    
C                                                                          GET_NAM2.104    
      DATA QW / 'qw'/                                                      GET_NAM2.105    
      DATA MEAN_PERIOD / '1', '2', '3', '4' /                              GET_NAM2.106    
      DATA CHAR_ID/ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',      GET_NAM2.107    
     1              'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',      GET_NAM2.108    
     2              'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',      GET_NAM2.109    
     3              'u', 'v', 'w', 'x', 'y', 'z' /                         GET_NAM2.110    
      DATA MONTH_3CHAR/ 'jan', 'feb', 'mar', 'apr', 'may', 'jun',          GET_NAM2.111    
     &                  'jul', 'aug', 'sep', 'oct', 'nov', 'dec'/          GET_NAM2.112    
      DATA MONTH_2CHAR/ 'ja', 'fb', 'mr', 'ar', 'my', 'jn',                RS270193.3      
     &                  'jl', 'ag', 'sp', 'ot', 'nv', 'dc'/                GET_NAM2.114    
      DATA SEASON_3CHAR/ 'ndj', 'djf', 'jfm', 'fma', 'mam', 'amj',         GET_NAM2.115    
     &                   'mjj', 'jja', 'jas', 'aso', 'son', 'ond'/         GET_NAM2.116    
      DATA SEASON_2CHAR/ 'nj', 'df', 'jm', 'fa', 'mm', 'aj',               GET_NAM2.117    
     &                   'mj', 'ja', 'js', 'ao', 'sn', 'od'/               GET_NAM2.118    
CL                                                                         GET_NAM2.119    
CL----------------------------------------------------------------------   GET_NAM2.120    
CL 1. Determine submodel id - (used in filechar 6 or 7 if operational)     GET_NAM2.121    
CL                                                                         GET_NAM2.122    
      IF (ISUBMODEL.EQ.ATMOS_SM) THEN                                      GET_NAM2.123    
       SUBMODEL_ID= 'a'                                                    GET_NAM2.124    
      ELSE IF (ISUBMODEL.EQ.OCEAN_SM) THEN                                 GET_NAM2.125    
       SUBMODEL_ID= 'o'                                                    GET_NAM2.126    
      ELSE IF (ISUBMODEL.EQ.WAVE_SM) THEN                                  WRB1F401.1175   
       SUBMODEL_ID= 'w'                                                    WRB1F401.1176   
      ELSE                                                                 GET_NAM2.127    
       ICODE=2                                                             GET_NAM2.128    
       CMESSAGE='GET_NAME: Illegal sub-model specified'                    GET_NAM2.129    
       GOTO 999                                                            GET_NAM2.130    
      ENDIF                                                                GET_NAM2.131    
      IF (ISUBMODEL.EQ.ATMOS_SM) THEN                                      GDR3F305.210    
! 1.1 Compute steps per hour for atmosphere sub_model                      GDR3F305.211    
      A_STEPS_PER_HR = 3600*STEPS_PER_PERIODim(a_im)/                      GDR3F305.212    
     &                       SECS_PER_PERIODim(a_im)                       GDR3F305.213    
      ENDIF                                                                GDR3F305.214    
C                                                                          GET_NAM2.132    
CL----------------------------------------------------------------------   GET_NAM2.133    
CL 2. Determine style filename and separator                               GET_NAM2.134    
CL                                                                         GET_NAM2.135    
      IF (FILETYPE.NE.'s') THEN                                            GET_NAM2.136    
CL                                                                         GET_NAM2.137    
CL 2.1 Relative time convention                                            GET_NAM2.138    
CL                                                                         GET_NAM2.139    
        IF (TIME_CONVENTION.eq.'Relative        ') THEN                    GET_NAM2.140    
          SEPARATOR='_'                                                    GET_NAM2.141    
          STYLE='A'                                                        GET_NAM2.142    
          IF (ISUBMODEL.EQ.atmos_sm) THEN ! atmosphere                     GET_NAM2.143    
          COUNT = STEPim(a_im) / A_STEPS_PER_HR - ANALYSIS_HRS             GDR5F305.24     
          ELSE IF (ISUBMODEL.eq.ocean_sm) THEN ! ocean                     GET_NAM2.145    
            COUNT = STEPim(o_im) * SECS_PER_PERIODim(o_im) /               GDR3F305.215    
     &                 STEPS_PER_PERIODim(o_im) / 3600                     GDR3F305.216    
     *             -ANALYSIS_HRS                                           GET_NAM2.147    
          ELSE IF (ISUBMODEL.eq.wave_sm) THEN ! WAVE                       WRB1F401.1177   
            COUNT = STEPim(w_im) * SECS_PER_PERIODim(w_im) /               WRB1F401.1178   
     &                 STEPS_PER_PERIODim(w_im) / 3600                     WRB1F401.1179   
     *             -ANALYSIS_HRS                                           WRB1F401.1180   
          ENDIF                                                            GET_NAM2.148    
CL                                                                         GET_NAM2.149    
CL 2.2 Step time convention                                                GET_NAM2.150    
CL                                                                         GET_NAM2.151    
        ELSE IF (TIME_CONVENTION.EQ.'Timestep         ') THEN              GET_NAM2.152    
                                                                           GET_NAM2.153    
          SEPARATOR='_'                                                    GET_NAM2.154    
          STYLE='A'                                                        GET_NAM2.155    
          IF (ISUBMODEL.EQ.atmos_sm) THEN ! Atmosphere                     GET_NAM2.156    
            COUNT = STEPim(a_im)                                           GDR5F305.25     
          ELSE if (ISUBMODEL.eq.ocean_sm) then ! Ocean                     GET_NAM2.158    
            COUNT = STEPim(o_im)                                           GDR5F305.26     
          ELSE if (ISUBMODEL.eq.wave_sm) then ! WAVE                       WRB1F401.1181   
            COUNT = STEPim(w_im)                                           WRB1F401.1182   
          ENDIF                                                            GET_NAM2.160    
CL                                                                         GET_NAM2.161    
CL 2.3 Absolute time convention -standard version                          GET_NAM2.162    
CL                                                                         GET_NAM2.163    
        ELSE IF (TIME_CONVENTION.EQ.'Absolute_standard') THEN              GET_NAM2.164    
          SEPARATOR='.'                                                    GET_NAM2.165    
          STYLE='B'                                                        GET_NAM2.166    
CL                                                                         GET_NAM2.167    
CL 2.4 Absolute time convention - short                                    GET_NAM2.168    
CL                                                                         GET_NAM2.169    
        ELSE IF (TIME_CONVENTION.EQ.'Absolute_short   ') THEN              GET_NAM2.170    
          SEPARATOR='-'                                                    GET_NAM2.171    
          STYLE='B'                                                        GET_NAM2.172    
CL                                                                         GET_NAM2.173    
CL 2.5 Absolute time convention - long                                     GET_NAM2.174    
CL                                                                         GET_NAM2.175    
        ELSE IF (TIME_CONVENTION.EQ.'Absolute_long    ') THEN              GET_NAM2.176    
          SEPARATOR='@'                                                    GET_NAM2.177    
          STYLE='B'                                                        GET_NAM2.178    
        ELSE                                                               GET_NAM2.179    
C                                                                          GET_NAM2.180    
            ICODE=1                                                        GET_NAM2.181    
            CMESSAGE='GET_NAME: Illegal TIME_CONVENTION specified'         GET_NAM2.182    
            GOTO 999                                                       GET_NAM2.183    
        ENDIF                                                              GET_NAM2.184    
CL----------------------------------------------------------------------   GET_NAM2.185    
CL                                                                         GET_NAM2.186    
CL 3.0 work out encoding of date time and filetype_2                       GET_NAM2.187    
CL                                                                         GET_NAM2.188    
        IF (STYLE.eq.'A') THEN                                             GET_NAM2.189    
          IF (COUNT.LT.0) THEN                                             GET_NAM2.190    
            COUNT=-COUNT                                                   GET_NAM2.191    
            FILETYPE_2='z'                                                 GET_NAM2.192    
            HUNDREDS = CHAR_ID(MOD(COUNT/100,36)+1)                        GET_NAM2.193    
            TENS =     CHAR_ID(MOD(COUNT/10 ,10)+1)                        GET_NAM2.194    
            UNITS =    CHAR_ID(MOD(COUNT,    10)+1)                        GET_NAM2.195    
          ELSE                                                             GET_NAM2.196    
            IF (FILETYPE.eq.'p') THEN                                      GET_NAM2.197    
              FILETYPE_2=LETTER_3                                          GET_NAM2.198    
        ELSE IF (FILETYPE.eq.'b') THEN   !  Boundary File                  GDR2F405.160    
          FILETYPE_2=LETTER_3                                              GDR2F405.161    
            ELSE                                                           GET_NAM2.199    
              FILETYPE_2='a'                                               GET_NAM2.200    
            ENDIF                                                          GET_NAM2.201    
            HUNDREDS = CHAR_ID(MOD(COUNT/100,36)+1)                        GET_NAM2.202    
            TENS =     CHAR_ID(MOD(COUNT/10 ,10)+1)                        GET_NAM2.203    
            UNITS =    CHAR_ID(MOD(COUNT,    10)+1)                        GET_NAM2.204    
          ENDIF                                                            GET_NAM2.205    
        ELSE IF (STYLE.EQ.'B') THEN   ! some sort of absolute time         GET_NAM2.206    
C                                                                          GET_NAM2.207    
C Current date time is                                                     GET_NAM2.208    
C                                                                          GET_NAM2.209    
          YYYY=I_YEAR                                                      GET_NAM2.210    
          MM  =I_MONTH                                                     GET_NAM2.211    
          DD  =I_DAY                                                       GET_NAM2.212    
          HH  =I_HOUR                                                      GET_NAM2.213    
          DAYNO = I_DAY_NUMBER                                             GET_NAM2.214    
C                                                                          GET_NAM2.215    
C Instantaneous files                                                      GET_NAM2.216    
C                                                                          GET_NAM2.217    
          IF (MEANLEV.EQ.0) THEN                                           GET_NAM2.218    
C  dumps                                                                   GET_NAM2.219    
            IF (FILETYPE.EQ.'d') THEN                                      GET_NAM2.220    
              FILETYPE_2 = 'a'                                             GET_NAM2.221    
            ENDIF                                                          GET_NAM2.222    
C                                                                          GET_NAM2.223    
C Work out reintialisation period for pp and boundary files.               GET_NAM2.224    
C Note assumes reinitialisation period is whole number of hours. This      GET_NAM2.225    
C is not strictly true but is probably ok for this purpose.                GET_NAM2.226    
C                                                                          GET_NAM2.227    
         IF (  FILETYPE.EQ.'p'   !  PP File                                GDR2F405.162    
     &    .or. FILETYPE.EQ.'b'   !  Boundary File                          GDR2F405.163    
     & ) THEN                                                              GDR2F405.164    
              IF (ISUBMODEL.eq.atmos_sm) then                              GET_NAM2.229    
                HOURS = REINIT_STEPS/A_STEPS_PER_HR                        GET_NAM2.230    
              ELSE IF (ISUBMODEL.eq.ocean_sm) THEN                         GET_NAM2.231    
                HOURS = REINIT_STEPS*SECS_PER_PERIODim(o_im)               GDR3F305.217    
     &                             /(STEPS_PER_PERIODim(o_im)*3600)        GDR3F305.218    
              ELSE IF (ISUBMODEL.eq.wave_sm) THEN                          WRB1F401.1183   
                HOURS = REINIT_STEPS*SECS_PER_PERIODim(w_im)               WRB1F401.1184   
     &                             /(STEPS_PER_PERIODim(w_im)*3600)        WRB1F401.1185   
              ENDIF                                                        GET_NAM2.234    
              if (REINIT_STEPS.lt.0) then ! Gregorian reinitialisation     GMG1F404.116    
                HOURS=720 ! dummy: could be anything divisible by 24       GMG1F404.117    
              endif                                                        GMG1F404.118    
C   do further checks if multiple of 1 day                                 GET_NAM2.235    
              IF (MOD(HOURS,24).eq.0) THEN  ! whole days in period, or     GMG1F404.119    
                DAYS=HOURS/24               ! Gregorian reinit.            GMG1F404.120    
                IF (FILETYPE.EQ.'b' ) THEN   !  Boundary File              GDR2F405.165    
C               boundary file test for filetype_2 - assumes 360 calendar   DR240293.600    
                  IF (DAYS.LT.10) THEN                                     GET_NAM2.240    
                    FILETYPE_2 = CHAR_ID(DAYS+1)                           GET_NAM2.241    
                  ELSE                                                     GET_NAM2.242    
                    CALL DAY2CHAR(DAYS,FILETYPE_2)                         GET_NAM2.243    
                    IF (FILETYPE_2.EQ.'0') THEN                            GET_NAM2.244    
                      FILETYPE_2 = 'b'                                     GET_NAM2.245    
                    ENDIF                                                  GET_NAM2.246    
                  ENDIF                                                    GET_NAM2.247    
                ENDIF                                                      GET_NAM2.248    
                IF (DD.eq.1 .and. TIME_CONVENTION.ne.'Absolute_short   '   GMG1F404.121    
     &              .and. (DAYS.EQ.30 .or. REINIT_STEPS.lt.0)) then        GMG1F404.122    
!  Original code didn't allow style=C for 3-month reinit files but new     GMG1F404.123    
!  code (Gregorian reinit) does, at least in section 3.0.                  GMG1F404.124    
                  STYLE='C'                ! month in characters           GET_NAM2.251    
                ENDIF                                                      GET_NAM2.252    
              ELSE                                                         GET_NAM2.253    
                IF (FILETYPE.EQ.'b' ) THEN   !  Boundary File              GDR2F405.166    
                  FILETYPE_2='b'                                           GET_NAM2.255    
                ENDIF                                                      GET_NAM2.256    
              ENDIF                                                        GET_NAM2.257    
C                                                                          GET_NAM2.258    
C For instantaneous pp file need to work out end of period as call to      GET_NAM2.259    
C   this routine occurrs on the first output timestep.                     GET_NAM2.260    
C                                                                          GET_NAM2.261    
              IF (FILETYPE.EQ.'p') THEN                                    GET_NAM2.262    
                FILETYPE_2 = LETTER_3                                      GET_NAM2.263    
                IF (STYLE.NE.'C') THEN                                     GET_NAM2.264    
                  IF (ISUBMODEL.eq.atmos_sm) THEN                          GET_NAM2.265    
                    IF (STEPim(a_im).EQ.0) THEN                            GDR5F305.27     
                     STEPS = REINIT_STEPS                                  TJ150493.4      
                    ELSE                                                   TJ150493.5      
                     STEPS = STEPim(a_im) + REINIT_STEPS - 1               GDR5F305.28     
                    ENDIF                                                  TJ150493.7      
                    CALL STP2TIME(STEPS,                                   TJ080294.483    
     &                            A_STEPS_PER_HR*24,86400,                 TJ080294.484    
     &                            END_DAYS,END_SECONDS)                    TJ080294.485    
                  ELSE IF (ISUBMODEL.eq.ocean_sm) THEN                     GET_NAM2.268    
                    IF (STEPim(o_im).EQ.0) THEN                            GDR5F305.29     
                     STEPS = REINIT_STEPS                                  TJ150493.9      
                    ELSE                                                   TJ150493.10     
                     STEPS = STEPim(o_im) + REINIT_STEPS - 1               GDR5F305.30     
                    ENDIF                                                  TJ150493.12     
                    CALL STP2TIME(STEPS,                                   TJ080294.486    
     &                STEPS_PER_PERIODim(o_im),SECS_PER_PERIODim(o_im),    GDR3F305.219    
     &                            END_DAYS,END_SECONDS)                    TJ080294.488    
                  ELSE IF (ISUBMODEL.eq.wave_sm) THEN                      WRB1F401.1186   
                    IF (STEPim(w_im).EQ.0) THEN                            WRB1F401.1187   
                     STEPS = REINIT_STEPS                                  WRB1F401.1188   
                    ELSE                                                   WRB1F401.1189   
                     STEPS = STEPim(w_im) + REINIT_STEPS - 1               WRB1F401.1190   
                    ENDIF                                                  WRB1F401.1191   
                    CALL STP2TIME(STEPS,                                   WRB1F401.1192   
     &                STEPS_PER_PERIODim(w_im),SECS_PER_PERIODim(w_im),    WRB1F401.1193   
     &                            END_DAYS,END_SECONDS)                    WRB1F401.1194   
                  ENDIF                                                    GET_NAM2.272    
                  CALL SEC2TIME(END_DAYS,END_SECONDS,                      TJ080294.489    
     &                          BASIS_TIME_DAYS,BASIS_TIME_SECS,           TJ080294.490    
     &                          YYYY,MM,DD,HH,IMIN,ISEC,DAYNO,LCAL360)     GSS1F304.337    
                ENDIF                                                      GET_NAM2.275    
              ENDIF                                                        GET_NAM2.276    
            ENDIF                                                          GET_NAM2.277    
                                                                           GET_NAM2.278    
          ELSE         !  MEANS                                            GET_NAM2.279    
C                                                                          GET_NAM2.280    
CL determine if special mean period                                        GET_NAM2.281    
            IF (ISUBMODEL.EQ.ATMOS_SM) THEN                                GET_NAM2.282    
              HOURS=DUMPFREQim(a_im)/A_STEPS_PER_HR                        GDR3F305.220    
              DO I=1,MEANLEV                                               GET_NAM2.284    
                HOURS=HOURS*MEANFREQim(I,a_im) !hours per meaning period   GDR3F305.221    
              ENDDO                                                        GET_NAM2.286    
            ELSE IF (ISUBMODEL.EQ.OCEAN_SM) THEN                           GET_NAM2.287    
              HOURS=DUMPFREQim(o_im)*SECS_PER_PERIODim(o_im)               GDR3F305.222    
     &                        /(3600*STEPS_PER_PERIODim(o_im))             GDR3F305.223    
              DO I=1,MEANLEV                                               GET_NAM2.290    
                HOURS=HOURS*MEANFREQim(I,o_im) !hours per meaning period   GDR3F305.224    
              ENDDO                                                        GET_NAM2.292    
            ELSE IF (ISUBMODEL.EQ.WAVE_SM) THEN                            WRB1F401.1195   
              HOURS=DUMPFREQim(w_im)*SECS_PER_PERIODim(w_im)               WRB1F401.1196   
     &                        /(3600*STEPS_PER_PERIODim(w_im))             WRB1F401.1197   
              DO I=1,MEANLEV                                               WRB1F401.1198   
                HOURS=HOURS*MEANFREQim(I,w_im) !hours per meaning period   WRB1F401.1199   
              ENDDO                                                        WRB1F401.1200   
            ENDIF                                                          GET_NAM2.293    
            IF (MOD(HOURS,24).EQ.0) THEN                                   GET_NAM2.294    
              DAYS=HOURS/24                                                GET_NAM2.295    
              CALL DAY2CHAR(DAYS,FILETYPE_2)                               GET_NAM2.296    
              IF (FILETYPE_2.eq.'0') THEN                                  GET_NAM2.297    
                FILETYPE_2=MEAN_PERIOD(MEANLEV)                            GET_NAM2.298    
              ELSE if (FILETYPE_2.eq.'m'.and.DD.eq.1                       GET_NAM2.299    
     &              .AND.TIME_CONVENTION.ne.'Absolute_short    ') THEN     GET_NAM2.300    
                STYLE='C'      ! period starts at beginning of a month     GET_NAM2.301    
                IF (MM.EQ.1) THEN ! correct year if month december         GET_NAM2.302    
                  YYYY=YYYY-1                                              GET_NAM2.303    
                ENDIF                                                      GET_NAM2.304    
              ELSE if (FILETYPE_2.eq.'s'.and.DD.eq.1                       GET_NAM2.305    
     &               .AND.TIME_CONVENTION.ne.'Absolute_short    ') THEN    GET_NAM2.306    
                STYLE='C'      ! period starts at beginning of aseason     GET_NAM2.307    
              ENDIF                                                        GET_NAM2.308    
            ELSE                                                           GET_NAM2.309    
              FILETYPE_2=MEAN_PERIOD(MEANLEV)                              GET_NAM2.310    
            ENDIF                                                          GET_NAM2.311    
          ENDIF                                                            GET_NAM2.312    
C                                                                          GET_NAM2.313    
          Y_UNITS = CHAR_ID(MOD(YYYY,10)+1)                                GET_NAM2.314    
          M = CHAR_ID(MM+1)                                                GET_NAM2.315    
          D = CHAR_ID(DD+1)                                                GET_NAM2.316    
          H = CHAR_ID(HH+1)                                                GET_NAM2.317    
C                                                                          GET_NAM2.318    
        ENDIF                                                              GET_NAM2.319    
C                                                                          GET_NAM2.320    
      ELSE                                                                 GET_NAM2.321    
C partial sum files - no date time information required                    GET_NAM2.322    
        SEPARATOR='_'                                                      GET_NAM2.323    
        FILETYPE_2 = MEAN_PERIOD(MEANLEV)                                  GET_NAM2.324    
      ENDIF                                                                GET_NAM2.325    
C                                                                          GET_NAM2.326    
CL----------------------------------------------------------------------   GET_NAM2.327    
!L 3.1 Construct filename from the various components                      GMG1F404.125    
CL                                                                         GET_NAM2.329    
      FILENAME="              "                                            GET_NAM2.330    
      IF (MODEL_STATUS.EQ.'Operational') THEN                              GET_NAM2.331    
        FILENAME(1:2)  =QW                                                 GET_NAM2.332    
        FILENAME(3:6)  =EXPT_ID                                            GET_NAM2.333    
        FILENAME(7:7)  =SUBMODEL_ID                                        GET_NAM2.334    
        FILENAME(8:8)  =SEPARATOR                                          GET_NAM2.335    
        FILENAME(9:9)  =FILETYPE                                           GET_NAM2.336    
        FILENAME(10:10)=FILETYPE_2                                         GET_NAM2.337    
        FILENAME(11:11)=HUNDREDS                                           GET_NAM2.338    
        FILENAME(12:12)=TENS                                               GET_NAM2.339    
        FILENAME(13:13)=UNITS                                              GET_NAM2.340    
      ELSE                                                                 GET_NAM2.341    
        FILENAME(1:4)  =EXPT_ID                                            GET_NAM2.342    
        FILENAME(5:5)  =JOB_ID                                             GET_NAM2.343    
        FILENAME(6:6)  =SUBMODEL_ID                                        GET_NAM2.344    
        FILENAME(7:7)  =SEPARATOR                                          GET_NAM2.345    
        FILENAME(8:8)  =FILETYPE                                           GET_NAM2.346    
        FILENAME(9:9)  =FILETYPE_2                                         GET_NAM2.347    
        IF (FILETYPE.EQ.'s') THEN                                          GET_NAM2.348    
          IF (TOGGLE.EQ.1) THEN                                            GET_NAM2.349    
            FILENAME(10:10)='a'                                            GET_NAM2.350    
          ELSE                                                             GET_NAM2.351    
            FILENAME(10:10)='b'                                            GET_NAM2.352    
          ENDIF                                                            GET_NAM2.353    
        ELSE IF (STYLE.EQ.'A') THEN                                        GET_NAM2.354    
          FILENAME(10:10)=HUNDREDS                                         GET_NAM2.355    
          FILENAME(11:11)=TENS                                             GET_NAM2.356    
          FILENAME(12:12)=UNITS                                            GET_NAM2.357    
        ELSE IF (STYLE.EQ.'B') THEN                                        GET_NAM2.358    
          IF (TIME_CONVENTION.EQ.'Absolute_standard') THEN                 GET_NAM2.359    
C                                                                          GET_NAM2.360    
C decades meansured relative to 1800                                       GET_NAM2.361    
            Y_TENS  = CHAR_ID(MOD(YYYY/10,36)+1)                           GET_NAM2.362    
            FILENAME(10:10)=Y_TENS                                         GET_NAM2.363    
            FILENAME(11:11)=Y_UNITS                                        GET_NAM2.364    
            FILENAME(12:12)=M                                              GET_NAM2.365    
            FILENAME(13:13)=D                                              GET_NAM2.366    
            FILENAME(14:14)=H                                              GET_NAM2.367    
          ELSE IF (TIME_CONVENTION.EQ.'Absolute_long    ') THEN            GET_NAM2.368    
                                                                           GET_NAM2.369    
C centuries  measured from 0 ie 1992  as j92, with wraparound at 3600      TJ150493.13     
            Y_HUNDS = CHAR_ID(MOD(YYYY/100,36)+1)                          TJ150493.14     
            Y_TENS  = CHAR_ID((YYYY-(YYYY/100)*100)/10+1)                  GET_NAM2.372    
            FILENAME(10:10)=Y_HUNDS                                        GET_NAM2.373    
            FILENAME(11:11)=Y_TENS                                         GET_NAM2.374    
            FILENAME(12:12)=Y_UNITS                                        GET_NAM2.375    
            FILENAME(13:13)=M                                              GET_NAM2.376    
            FILENAME(14:14)=D                                              GET_NAM2.377    
          ELSE IF (TIME_CONVENTION.EQ.'Absolute_short   ') THEN            GET_NAM2.378    
            FILENAME(10:10)=Y_UNITS                                        GET_NAM2.379    
    1       FORMAT (I3)                                                    GET_NAM2.380    
    2       FORMAT ('0',I2)                                                GET_NAM2.381    
    3       FORMAT ('00',I1)                                               GET_NAM2.382    
            IF (DAYNO.LT.100) THEN                                         GET_NAM2.383    
              IF (DAYNO.LT.10) THEN                                        GET_NAM2.384    
                WRITE(CDAYNO,3) DAYNO                                      GET_NAM2.385    
              ELSE                                                         GET_NAM2.386    
                WRITE(CDAYNO,2) DAYNO                                      GET_NAM2.387    
              ENDIF                                                        GET_NAM2.388    
            ELSE                                                           GET_NAM2.389    
              WRITE(CDAYNO,1) DAYNO                                        GET_NAM2.390    
            ENDIF                                                          GET_NAM2.391    
            FILENAME(11:13)= CDAYNO                                        GET_NAM2.392    
            FILENAME(14:14)=H                                              GET_NAM2.393    
          ENDIF                                                            GET_NAM2.394    
        ELSE  ! style C - Character date                                   GET_NAM2.395    
          IF (TIME_CONVENTION.EQ.'Absolute_standard') THEN                 GET_NAM2.396    
C                                                                          GET_NAM2.397    
C decades meansured relative to 1800                                       GET_NAM2.398    
            Y_TENS  = CHAR_ID(MOD(YYYY/10,36)+1)                           GET_NAM2.399    
            FILENAME(10:10)=Y_TENS                                         GET_NAM2.400    
            FILENAME(11:11)=Y_UNITS                                        GET_NAM2.401    
            IF (MEANLEV.eq.0) THEN                                         GET_NAM2.402    
              FILENAME(12:14) = MONTH_3CHAR(MM)                            GET_NAM2.403    
            ELSE ! means date routine called is at beginning of next       GET_NAM2.404    
C                   period                                                 GET_NAM2.405    
             MON=MM-1                                                      GET_NAM2.406    
             IF (MON.EQ.0) THEN                                            GET_NAM2.407    
               MON = 12                                                    GET_NAM2.408    
             ENDIF                                                         GET_NAM2.409    
             IF (FILETYPE_2.eq.'m') THEN                                   GET_NAM2.410    
               FILENAME(12:14) = MONTH_3CHAR(MON)                          GET_NAM2.411    
             ELSE                                                          GET_NAM2.412    
               FILENAME(12:14) = SEASON_3CHAR(MON)                         GET_NAM2.413    
             ENDIF                                                         GET_NAM2.414    
            ENDIF                                                          GET_NAM2.415    
          ELSE IF (TIME_CONVENTION.EQ.'Absolute_long    ') THEN            GET_NAM2.416    
                                                                           GET_NAM2.417    
C centuries  measured from 0 ie 1992  as j92, with wraparound at 3600      TJ150493.15     
            Y_HUNDS = CHAR_ID(MOD(YYYY/100,36)+1)                          TJ150493.16     
            Y_TENS  = CHAR_ID((YYYY-(YYYY/100)*100)/10+1)                  GET_NAM2.420    
            FILENAME(10:10)=Y_HUNDS                                        GET_NAM2.421    
            FILENAME(11:11)=Y_TENS                                         GET_NAM2.422    
            FILENAME(12:12)=Y_UNITS                                        GET_NAM2.423    
            IF (MEANLEV.eq.0) THEN                                         GET_NAM2.424    
              FILENAME(13:14) = MONTH_2CHAR(MM)                            GET_NAM2.425    
            ELSE ! means date routine called is at beginning of next       GET_NAM2.426    
C                   period                                                 GET_NAM2.427    
             MON=MM-1                                                      GET_NAM2.428    
             IF (MON.EQ.0) THEN                                            GET_NAM2.429    
               MON = 12                                                    GET_NAM2.430    
             ENDIF                                                         GET_NAM2.431    
             IF (FILETYPE_2.eq.'m') THEN                                   GET_NAM2.432    
               FILENAME(13:14) = MONTH_2CHAR(MON)                          GET_NAM2.433    
             ELSE                                                          GET_NAM2.434    
               FILENAME(13:14) = SEASON_2CHAR(MON)                         GET_NAM2.435    
             ENDIF                                                         GET_NAM2.436    
            ENDIF                                                          GET_NAM2.437    
          ENDIF                                                            GET_NAM2.438    
        ENDIF                                                              GET_NAM2.439    
      ENDIF                                                                GET_NAM2.440    
C                                                                          GET_NAM2.441    
 999  CONTINUE                                                             GET_NAM2.442    
      RETURN                                                               GET_NAM2.443    
CL----------------------------------------------------------------------   GET_NAM2.444    
      END                                                                  GET_NAM2.445    
*ENDIF                                                                     GET_NAM2.446