*IF DEF,CONTROL                                                            MEANCTL1.2      
C ******************************COPYRIGHT******************************    GTS2F400.5851   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.5852   
C                                                                          GTS2F400.5853   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.5854   
C restrictions as set forth in the contract.                               GTS2F400.5855   
C                                                                          GTS2F400.5856   
C                Meteorological Office                                     GTS2F400.5857   
C                London Road                                               GTS2F400.5858   
C                BRACKNELL                                                 GTS2F400.5859   
C                Berkshire UK                                              GTS2F400.5860   
C                RG12 2SZ                                                  GTS2F400.5861   
C                                                                          GTS2F400.5862   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.5863   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.5864   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.5865   
C Modelling at the above address.                                          GTS2F400.5866   
C ******************************COPYRIGHT******************************    GTS2F400.5867   
C                                                                          GTS2F400.5868   
CLL    Subroutine: MEANCTL-----------------------------------------        MEANCTL1.3      
CLL                                                                        MEANCTL1.4      
CLL    Purpose: To accumulate partial sums and create time-meaned data     MEANCTL1.5      
CLL                                                                        MEANCTL1.6      
CLL    Tested under compiler:           Tested under OS version:           MEANCTL1.7      
CLL    cft77                            UNICOS 5.1                         MEANCTL1.8      
CLL                                                                        MEANCTL1.9      
CLL   updated  5/11/92 by A. Dickinson                                     MEANCTL1.10     
CLL                                                                        MEANCTL1.11     
CLL  Model            Modification history from model version 3.0:         MEANCTL1.12     
CLL version  Date                                                          MEANCTL1.13     
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.105    
CLL                   portability.  Author Tracey Smith.                   TS150793.106    
CLL  3.2  22/07/93  Dynamic allocation changes.  R.T.H.Barnes.             @DYALLOC.2255   
CLL   3.4    17/06/94 Argument LCAL360 added and passed to MEANDIAG,       GSS1F304.458    
CLL                           PRINTCTL, GET_NAME.    S.J.Swarbrick         GRB1F305.343    
CLL  3.5  13/04/95  Sub-models stage 1: revise History and control file    GRB1F305.344    
CLL                 contents.  RTHBarnes                                   GRB1F305.345    
CLL   3.5  24/03/95    Changed OPEN to FILE_OPEN and                       GPB1F305.56     
CLL                    CLOSE to FILE_CLOSE    P.Burton                     GPB1F305.57     
CLL  4.0  14/12/95  Remove erroneous LCAL360 from PRINTCTL call. RTHB.     GRB1F400.61     
!    4.1  18/06/96  Changes to cope with changes in STASH addressing       GDG0F401.831    
!                   Author D.M. Goddard.                                   GDG0F401.832    
!LL  4.2  27/11/96  Changes to parallelise climate meaning. K Rogers       GKR1F402.1      
!    4.2  11/10/96  Enable atmos-ocean coupling for MPP.                   GRR1F402.317    
!                   (2): Swap D1 memory. New argument in TRANSIN,          GRR1F402.318    
!                   TRANSOUT routines. R. Rawlins                          GRR1F402.319    
!LL  4.3  02/04/97  Add extra WRITD1 args to DUMPCTL. K Rogers             GKR4F403.35     
!LL  4.4  22/09/97  Do not write out mean dumps that aren't                GSM2F404.1      
!LL                 required. S.D. Mullerworth                             GSM2F404.2      
!LL  4.4  31/01/97  Changes to allow climate means with Gregorian          GMG1F404.126    
!LL                 calendar. Author: M. Gallani                           GMG1F404.127    
!LL  4.4  09/10/97  Writes to archive server moved here from DUMPCTL       GKR1F404.287    
!LL                 so done after meaning.  Also added check on            GKR1F404.288    
!LL                 return code after second call to ACUMPS. K Rogers      GKR1F404.289    
!LL  4.4  17/06/97  Add code to pass the O/P file length                   GBC6F404.86     
!LL                 to the I/O routines.                                   GBC6F404.87     
!LL                   Author: Bob Carruthers, Cray Research.               GBC6F404.88     
!LL  4.5   21/04/97  Set up and pass ARGFLDPT variables to MEANDIAG        GSM1F405.492    
!LL                  S.D.Mullerworth                                       GSM1F405.493    
!LL  4.5  13/01/98  Pass the maximum dump output length to meandiag        GPB2F405.77     
!LL                                                        P.Burton        GPB2F405.78     
!LL  4.5  29/07/98  Rename CINTF to CINTFA. D. Robinson.                   GDR2F405.116    
!LL  4.5   May 98   Correct code to delete previous safe restart dumps     GIE0F405.44     
!LL                 in slab model runs.  Ian Edmond.                       GIE0F405.45     
!LL  4.5  10/10/98  Add ARGINFO to argument list. Pass ARGINFO             GMB1F405.401    
!LL                 to MEANDIAG. D. Robinson.                              GMB1F405.402    
CLL                                                                        MEANCTL1.14     
CLL   Programming standard: UM Doc Paper 3 vn2 (7/9/90)                    MEANCTL1.15     
CLL                                                                        MEANCTL1.16     
CLL  Logical system components covered: C5                                 MEANCTL1.17     
CLL                                                                        MEANCTL1.18     
CLL    Project tasks: C5,C51,C52                                           MEANCTL1.19     
CLL                                                                        MEANCTL1.20     
CLL    External documentation: UMDP C5 - Control of means calculations     MEANCTL1.21     
CLL                                                                        MEANCTL1.22     
CLLEND ------------------------------------------------------------        MEANCTL1.23     
C*L    Interface and arguments:                                            MEANCTL1.24     

      SUBROUTINE MEANCTL (                                                  1,75@DYALLOC.2256   
*CALL ARGSIZE                                                              @DYALLOC.2257   
*CALL ARGD1                                                                @DYALLOC.2258   
*CALL ARGDUMA                                                              @DYALLOC.2259   
*CALL ARGDUMO                                                              @DYALLOC.2260   
*CALL ARGDUMW                                                              GKR1F401.226    
*CALL ARGPTRA                                                              @DYALLOC.2261   
*CALL ARGPTRO                                                              @DYALLOC.2262   
*CALL ARGSTS                                                               @DYALLOC.2263   
*CALL ARGCONA                                                              @DYALLOC.2264   
*CALL ARGINFA                                                              @DYALLOC.2265   
*CALL ARGINFO                                                              GMB1F405.403    
*CALL ARGPPX                                                               GKR0F305.953    
     &           IND_IM,MEANLEV,ICODE,CMESSAGE)                            GRB1F305.346    
C                                                                          MEANCTL1.26     
      IMPLICIT NONE                                                        MEANCTL1.27     
                                                                           @DYALLOC.2267   
C*L Arguments                                                              @DYALLOC.2268   
                                                                           @DYALLOC.2269   
*CALL CMAXSIZE                                                             @DYALLOC.2270   
*CALL CSUBMODL                                                             GSS1F305.933    
*CALL CINTFA                                                               GDR2F405.117    
*CALL TYPSIZE                                                              @DYALLOC.2271   
*CALL TYPD1                                                                @DYALLOC.2272   
*CALL TYPDUMA                                                              @DYALLOC.2273   
*CALL TYPDUMO                                                              @DYALLOC.2274   
*CALL TYPDUMW                                                              GKR1F401.227    
*CALL TYPPTRA                                                              @DYALLOC.2275   
*CALL TYPPTRO                                                              @DYALLOC.2276   
*CALL TYPSTS                                                               @DYALLOC.2277   
*CALL TYPCONA                                                              @DYALLOC.2278   
*CALL TYPINFA                                                              @DYALLOC.2279   
*IF DEF,ATMOS                                                              GSM1F405.494    
*CALL TYPFLDPT                                                             GSM1F405.495    
*ENDIF                                                                     GSM1F405.496    
*CALL TYPINFO                                                              GMB1F405.404    
*CALL PPXLOOK                                                              GKR0F305.954    
                                                                           @DYALLOC.2280   
      INTEGER                                                              MEANCTL1.29     
     &       IND_IM,           ! IN Internal model indicator               GRB1F305.347    
     *       MEANLEV,          ! INOUT  Mean level indicator               MEANCTL1.31     
     &       ICODE             ! OUT return code; successful=0, error> 0   MEANCTL1.32     
                                                                           @DYALLOC.2281   
C                                                                          MEANCTL1.33     
      CHARACTER*80                                                         TS150793.107    
     &       CMESSAGE          ! OUT Error message if ICODE > 0            MEANCTL1.35     
C                                                                          MEANCTL1.36     
C      Common blocks                                                       MEANCTL1.37     
C                                                                          MEANCTL1.38     
*CALL CTIME                                                                MEANCTL1.40     
*CALL CHSUNITS                                                             GRB1F305.348    
*CALL CHISTORY                                                             MEANCTL1.41     
*CALL CCONTROL                                                             GRB1F305.349    
*CALL CMEANCTL                                                             MEANCTL1.42     
*CALL CENVIR                                                               MEANCTL1.43     
C                                                                          MEANCTL1.44     
C*L                                                                        MEANCTL1.45     
C*L    External subroutines called:                                        MEANCTL1.46     
      EXTERNAL GET_NAME,DUMPCTL,ACUMPS,SETPERLEN,MEANPS                    GMG1F404.128    
     &,        TRANSIN,TRANSOUT                                            MEANCTL1.48     
     &,        MEANDIAG,PRINTCTL                                           MEANCTL1.49     
*IF DEF,ATMOS                                                              MEANCTL1.50     
     &,        SETEXNER                                                    MEANCTL1.51     
*ENDIF                                                                     MEANCTL1.52     
C                                                                          MEANCTL1.53     
C      Local variables and arrays                                          MEANCTL1.54     
C                                                                          MEANCTL1.55     
      INTEGER                                                              MEANCTL1.56     
     *       IFIND,               ! Loop counter                           MEANCTL1.57     
     &       INDEXL,              ! Loop index                             MEANCTL1.58     
     &       STEP_DUMPS,          ! Timestep (in multiples of restart      MEANCTL1.59     
     *                            !           dump frequency)              MEANCTL1.60     
     &       NMEANS,              ! No. of means chosen (fixed, unless     GMG1F404.129    
     &                            ! there is a mean offset)                GMG1F404.130    
     &       RESIDU,              ! Reference for partial sum data         MEANCTL1.62     
     &       MEANS_TOTAL,         ! Number of mean dumps this timestep     MEANCTL1.63     
     &       NMVALS(4),           ! Absolute meaning periods (in           MEANCTL1.64     
     *                            ! multiples of restart dump frequency)   MEANCTL1.65     
     &       PS_FLAG(4),          ! Flag for partial sum updating          MEANCTL1.66     
     &       PRINT_FLAG(4),       ! Flag for mean printing frequencies     MEANCTL1.67     
     &       PRINT_FREQ(4),       ! Mean printing frequencies              MEANCTL1.68     
     &       FT_PS(4,2),          ! Unit numbers for dumps of partial      GMG1F404.131    
     &                            ! sum data (read/write)                  GMG1F404.132    
     &       PERIODLEN,           ! Length in days of current period N     GMG1F404.133    
     &       PERIODLENDM,         ! Length in dumps of period 1 or         GMG1F404.134    
     &                            ! in days of current period N>1          GMG1F404.135    
     &       DUMPS_PER_DAY        ! Number of restart dumps per day        GMG1F404.136    
      INTEGER                                                              MEANCTL1.71     
     &       INDEX_READ,          ! Specific index no for reading          MEANCTL1.72     
     &       INDEX_WRITE          ! Specific index no for writing          MEANCTL1.73     
      INTEGER                                                              MEANCTL1.74     
     &       FT_READ,             ! Unit number for partial sum read       MEANCTL1.75     
     &       FT_WRITE,            ! Unit number for partial sum write      MEANCTL1.76     
     &       FT_DELETE,           ! Unit number for partial sum delete     MEANCTL1.77     
     &       FT_SSD               ! Unit no for transfer of inst. data     MEANCTL1.78     
     *,LEN_PSNAME                                                          MEANCTL1.79     
     &,disk_address                    ! Current rounded disk address      GBC6F404.89     
     &,number_of_data_words_on_disk    ! Number of data words on disk      GBC6F404.90     
     &,number_of_data_words_in_memory  ! Number of Data Words in memory    GBC6F404.91     
     &,get_char_len                    ! function returns number of non-   GBC6F404.92     
                                       ! blank leading characters from a   GBC6F404.93     
                                       ! character variable                GBC6F404.94     
     &,maximum_file_length             ! Maximum file length for FT_SSD    GBC6F404.95     
      INTEGER internal_model                                               GIE0F405.46     
      INTEGER im      ! temporary internal model id for ocean or slab      GIE0F405.47     
      INTEGER                                                              MEANCTL1.80     
     &       REINIT_STEPS         ! dummy input for GET_NAME               MEANCTL1.81     
     &,      D1_ADDR_SUBMODEL_ID  ! Submodel number in D1_ADDR             GSM1F403.177    
      LOGICAL                                                              GMG1F404.137    
     &       LMEANINC             ! increment MEANS_TOTAL or not           GMG1F404.138    
                                                                           GPB2F405.79     
*IF DEF,MPP                                                                GPB2F405.80     
*CALL STPARAM                                                              GPB2F405.81     
                                                                           GPB2F405.82     
      INTEGER                                                              GPB2F405.83     
     &  IE  ! loop counter over items                                      GPB2F405.84     
     &, tag ! indicates if this field is meaned                            GPB2F405.85     
     &, maxsize ! maximum dump output length                               GPB2F405.86     
*ENDIF                                                                     GPB2F405.87     
                                                                           GPB2F405.88     
C                                                                          MEANCTL1.82     
C      Character data                                                      MEANCTL1.83     
C                                                                          MEANCTL1.84     
      CHARACTER*14 PSNAME_READ,PSNAME_WRITE,PSNAME_DELETE                  MEANCTL1.85     
      CHARACTER*1                                                          MEANCTL1.86     
     &       BLANK                                                         MEANCTL1.87     
     &,      LETTER_3             ! dummy input for GET_NAME               MEANCTL1.88     
      CHARACTER*80 FILENAME       ! Name of pipe to server                 GKR1F404.290    
*CALL PARPARM                                                              GKR1F404.291    
*CALL PARCOMM                                                              GKR1F404.292    
*IF DEF,ATMOS                                                              GSM1F405.497    
*CALL SETFLDPT                                                             GSM1F405.498    
*ENDIF                                                                     GSM1F405.499    
C                                                                          MEANCTL1.89     
      BLANK=' '                                                            MEANCTL1.90     
      CMESSAGE=' '                                                         MEANCTL1.91     
      LETTER_3='a'                                                         MEANCTL1.92     
      REINIT_STEPS=0                                                       MEANCTL1.93     
                                                                           GKR1F404.293    
! Get name of pipe                                                         GKR1F404.294    
      CALL GET_FILE(8,FILENAME,80,ICODE)                                   GKR1F404.295    
C                                                                          MEANCTL1.94     
C      Set up unit number for instantaneous                                MEANCTL1.95     
C      dump transfer                                                       MEANCTL1.96     
C                                                                          MEANCTL1.97     
      FT_SSD=17                                                            MEANCTL1.98     
C                                                                          MEANCTL1.99     
C      Define mode of use for means program                                MEANCTL1.100    
C                                                                          MEANCTL1.101    
      IF(IND_IM.EQ.1)THEN                                                  GRB1F305.350    
        WRITE(6,*)'MEANCTL: ***** Called in ATMOSPHERIC mode *****'        GIE0F403.387    
      ENDIF                                                                MEANCTL1.105    
      IF(IND_IM.EQ.2)THEN                                                  GRB1F305.351    
        WRITE(6,*)'MEANCTL: ***** Called in OCEAN mode *****'              GIE0F403.388    
      ENDIF                                                                MEANCTL1.110    
CL                                                                         MEANCTL1.112    
CL----------------------------------------------------------------------   MEANCTL1.113    
CL     Find out which mean datasets need to be created                     MEANCTL1.114    
CL     on this timestep (if any) and set MEANS_TOTAL accordingly           MEANCTL1.115    
CL----------------------------------------------------------------------   MEANCTL1.116    
CL                                                                         MEANCTL1.117    
C                                                                          MEANCTL1.118    
      INDEXL=RUN_MEANCTL_RESTART         ! Zero in normal circumstances    MEANCTL1.119    
      ICODE=0                                                              MEANCTL1.120    
      MEANS_TOTAL=0                                                        MEANCTL1.121    
C                                                                          MEANCTL1.122    
C      Initially check validity of call to subroutine                      MEANCTL1.123    
C                                                                          MEANCTL1.124    
      IF(IND_IM.EQ.1 .or. IND_IM.EQ.2)THEN                                 GRB1F305.352    
        IF(DUMPFREQim(IND_IM).EQ.0)THEN ! Is mean dump production off?     GMG1F404.139    
          ICODE=1                                                          MEANCTL1.128    
          CMESSAGE='MEANCTL: Invalid call to subroutine'                   MEANCTL1.129    
      WRITE(6,*) 'MEANCTL: DUMPFREQ(',IND_IM,')= ',DUMPFREQim(IND_IM)      GIE0F403.389    
          GOTO 999                                                         MEANCTL1.131    
        ELSEIF(MOD(STEPim(IND_IM),DUMPFREQim(IND_IM)).NE.0)THEN            GRB1F305.355    
          ICODE=2        ! This is not a dumping timestep                  GMG1F404.140    
          CMESSAGE='MEANCTL: Incorrect timestep to call subroutine'        MEANCTL1.134    
          WRITE(6,*) 'MEANCTL: STEP is not a multiple of DUMPFREQ'         GIE0F403.390    
          WRITE(6,*) '         STEP(',IND_IM,')= ',STEPim(IND_IM),         GIE0F403.391    
     &                   ' DUMPFREQ(',IND_IM,')= ', DUMPFREQim(IND_IM)     GRB1F305.358    
          GOTO 999                                                         MEANCTL1.137    
        ELSE                                                               MEANCTL1.138    
          STEP_DUMPS = (STEPim(IND_IM)/DUMPFREQim(IND_IM))+                GRB1F305.359    
     &                   OFFSET_DUMPSim(IND_IM)                            GRB1F305.360    
        ENDIF                                                              MEANCTL1.140    
      ENDIF                                                                MEANCTL1.141    
C                                                                          MEANCTL1.143    
C      Pick up number of means chosen from history file (MEAN_NUMBERim)    GRB1F305.361    
C      or number determined by the offset from the reference time whilst   GRB1F305.362    
C      the staggered start of means production unwinds  (MEAN_OFFSETim)    GRB1F305.363    
C                                                                          MEANCTL1.162    
      IF(IND_IM.EQ.1 .or. IND_IM.EQ.2)THEN                                 GRB1F305.364    
        DO IFIND=1,MEAN_NUMBERim(IND_IM)                                   GRB1F305.365    
          IF(IFIND.EQ.1)NMVALS(IFIND) = MEANFREQim(IFIND,IND_IM)           GRB1F305.366    
          IF(IFIND.GT.1)NMVALS(IFIND) = MEANFREQim(IFIND,IND_IM)*          GRB1F305.367    
     &                                   NMVALS(IFIND-1)                   GRB1F305.368    
          PRINT_FREQ(IFIND)=NMVALS(IFIND)*PRINTFREQim(IFIND+1,IND_IM)      GRB1F305.369    
        ENDDO                                                              MEANCTL1.173    
      ENDIF                                                                MEANCTL1.174    
C                                                                          MEANCTL1.185    
      if (lclimrealyr) then                                                GMG1F404.141    
        DUMPS_PER_DAY=(24*3600*STEPS_PER_PERIODim(IND_IM))/                GMG1F404.142    
     &                (DUMPFREQim(IND_IM)*SECS_PER_PERIODim(IND_IM))       GMG1F404.143    
      endif                                                                GMG1F404.144    
!                                                                          GMG1F404.145    
      IF(IND_IM.EQ.1 .or. IND_IM.EQ.2)THEN                                 GRB1F305.370    
        IF(MEAN_OFFSETim(IND_IM).EQ.MEAN_NUMBERim(IND_IM))THEN             GRB1F305.371    
          NMEANS=MEAN_NUMBERim(IND_IM)                                     GRB1F305.372    
        ELSE  ! there is a non-zero offset so increment mean_offset        GMG1F404.146    
              ! when run is partway into the current mean period.          GMG1F404.147    
          DO IFIND=MEAN_OFFSETim(IND_IM)+1,MEAN_NUMBERim(IND_IM)           GRB1F305.373    
            if (lclimrealyr) then                                          GMG1F404.148    
              if ((ifind .eq. 1 .and. i_day .eq. 2 .and.                   GMG1F404.149    
     &           (dumps_per_day .le. 1)) .or.           ! 24h dumps        GMG1F404.150    
     &           (ifind .eq. 1 .and. i_day .eq. 1 .and. ! dumps lt 24h     GMG1F404.151    
     &           i_hour .eq. (24/dumps_per_day))) then                     GMG1F404.152    
                mean_offsetim(IND_IM)=mean_offsetim(IND_IM)+1 ! months     GMG1F404.153    
              elseif (ifind .eq. 2 .and.                                   GMG1F404.154    
     &               (i_day .eq. 1) .and. i_hour .eq. 0 .and.              GMG1F404.155    
     &               mod(((i_month-1)-MEAN_REFTIMEim(2,IND_IM)),3).eq.0)   GMG1F404.156    
     &               then                                                  GMG1F404.157    
                mean_offsetim(IND_IM)=mean_offsetim(IND_IM)+1 ! seasons    GMG1F404.158    
              elseif (ifind .eq. 3 .and.                                   GMG1F404.159    
     &               (i_day .eq. 1) .and. (i_hour .eq. 0) .and.            GMG1F404.160    
     &              mod(((i_month-3)-MEAN_REFTIMEim(2,IND_IM)),12).eq.0)   GMG1F404.161    
     &               then                                                  GMG1F404.162    
                mean_offsetim(IND_IM)=mean_offsetim(IND_IM)+1 ! years      GMG1F404.163    
              endif  ! of test on ifind, i_day, etc.                       GMG1F404.164    
            else  ! for 360d year, use array of no. of mean dumps          GMG1F404.165    
              IF(STEP_DUMPS.LT.0)THEN  ! mean ref time not reached yet     GMG1F404.166    
              RESIDU=1-NMVALS(IFIND)                                       MEANCTL1.193    
              ELSE                     ! mean ref time has been passed     GMG1F404.167    
              RESIDU=1                                                     MEANCTL1.195    
            ENDIF                                                          MEANCTL1.196    
            IF(MOD(STEP_DUMPS,NMVALS(IFIND)).EQ.RESIDU)THEN                MEANCTL1.197    
              MEAN_OFFSETim(IND_IM)=MEAN_OFFSETim(IND_IM)+1                GRB1F305.374    
            ENDIF                                                          MEANCTL1.199    
            endif  ! end of checking whether to increment MEAN_OFFSETim    GMG1F404.168    
          ENDDO  ! end of loop over IFIND                                  GMG1F404.169    
          NMEANS=MEAN_OFFSETim(IND_IM)                                     GRB1F305.375    
          WRITE(6,*)' MEAN_OFFSET(',IND_IM,')=',MEAN_OFFSETim(IND_IM)      GIE0F403.392    
        ENDIF  ! end of setting NMEANS                                     GMG1F404.170    
        ENDIF                                                              MEANCTL1.203    
CL                                                                         MEANCTL1.226    
CL      If no processing is required (because of staggered                 MEANCTL1.227    
CL      start in means production) then skip to end of subroutine          MEANCTL1.228    
CL                                                                         MEANCTL1.229    
      IF(NMEANS.EQ.0)THEN                                                  MEANCTL1.230    
        ICODE=-1                                                           MEANCTL1.231    
        CMESSAGE='MEANCTL: No accumulation/meaning done this step'         MEANCTL1.232    
        WRITE(6,*)'MEANCTL: No accm/meaning due to staggered start'        GIE0F403.393    
        GO TO 999                                                          MEANCTL1.234    
      ENDIF                                                                MEANCTL1.235    
CL                                                                         MEANCTL1.236    
CL      Output message whilst stagger unwinds                              MEANCTL1.237    
CL                                                                         MEANCTL1.238    
      IF(IND_IM.EQ.1 .or. IND_IM.EQ.2)THEN                                 GRB1F305.377    
        DO IFIND=1,MEAN_NUMBERim(IND_IM)                                   GRB1F305.378    
          IF(NMEANS.LT.IFIND)THEN                                          MEANCTL1.242    
            WRITE(6,*)'MEANCTL: Period_',IFIND,' mean not activated',      GIE0F403.394    
     &      BLANK,'because of staggered start in means production'         MEANCTL1.244    
          ENDIF                                                            MEANCTL1.245    
        ENDDO                                                              MEANCTL1.246    
      ENDIF                                                                MEANCTL1.247    
C                                                                          MEANCTL1.259    
      DO IFIND=1,NMEANS                                                    MEANCTL1.260    
C                                                                          MEANCTL1.261    
        PS_FLAG(IFIND)=0                                                   MEANCTL1.262    
        PRINT_FLAG(IFIND)=0                                                MEANCTL1.263    
        lmeaninc=.false. ! Initialise to avoid false positive results      GMG1F404.171    
C                                                                          MEANCTL1.264    
! Find out if the end of any meaning period has been reached. If so,       GMG1F404.172    
! increment MEANS_TOTAL                                                    GMG1F404.173    
        if (lclimrealyr .and. (ifind .eq. 1) .and.                         GMG1F404.174    
     &     (i_day .eq. 1) .and. (i_hour.eq.0)   ! but not 1st day of run   GMG1F404.175    
     &     .and. (STEPim(IND_IM) .gt. STEPS_PER_PERIODim(IND_IM))) then    GMG1F404.176    
          lmeaninc=.true.                               ! monthly          GMG1F404.177    
        elseif (lclimrealyr .and. (ifind .eq. 2) .and.                     GMG1F404.178    
     &         (i_day .eq. 1) .and. (i_hour .eq. 0) .and. ! seasonal       GMG1F404.179    
     &         (STEPim(IND_IM) .gt. STEPS_PER_PERIODim(IND_IM)) .and.      GMG1F404.180    
     &         mod((i_month-MEAN_REFTIMEim(2,IND_IM)),3).eq.0) then        GMG1F404.181    
          lmeaninc=.true.                                                  GMG1F404.182    
        elseif (lclimrealyr .and. (ifind .eq. 3) .and.                     GMG1F404.183    
     &         (i_day .eq. 1) .and. (i_hour .eq. 0) .and. ! annual         GMG1F404.184    
     &         (STEPim(IND_IM) .gt. STEPS_PER_PERIODim(IND_IM)) .and.      GMG1F404.185    
     &         mod((i_month-MEAN_REFTIMEim(2,IND_IM)),12).eq.0) then       GMG1F404.186    
          lmeaninc=.true.                                                  GMG1F404.187    
        elseif (.not. lclimrealyr .and.     ! 360-day calendar             GMG1F404.188    
     &         MOD(STEP_DUMPS,NMVALS(IFIND)).EQ.0) then                    GMG1F404.189    
          lmeaninc=.true.                                                  GMG1F404.190    
        endif  ! end of IF test on reaching end of meaning period          GMG1F404.191    
        if (lmeaninc) then                                                 GMG1F404.192    
          MEANS_TOTAL=MEANS_TOTAL+1                                        MEANCTL1.266    
          IF(RUN_MEANCTL_RESTART.GT.1.AND.                                 MEANCTL1.267    
     &       RUN_MEANCTL_RESTART.GT.IFIND)THEN                             MEANCTL1.268    
            WRITE(6,*) 'MEANCTL: Period_',IFIND,' mean dump',BLANK,        GIE0F403.395    
     &                        'already created this timestep'              MEANCTL1.270    
          ELSE                                                             MEANCTL1.271    
            WRITE(6,*) 'MEANCTL: Period_',IFIND,' mean dump',BLANK,        GIE0F403.396    
     &                        'to be created this timestep'                MEANCTL1.273    
          ENDIF                                                            MEANCTL1.274    
        endif  ! end of IF test on lmeaninc                                GMG1F404.193    
C                                                                          MEANCTL1.276    
! Find out if run is one period(N-1) into the period(N), in which case     GMG1F404.194    
! set PS_FLAG(IFIND)=1 because there will not already be a file for        GMG1F404.195    
! that partial sum on the disk, so ACUMPS must get it from D1.             GMG1F404.196    
!                                                                          GMG1F404.197    
        if (lclimrealyr) then                                              GMG1F404.198    
          if ((ifind .eq. 1 .and. i_day .eq. 2 .and.                       GMG1F404.199    
     &       (dumps_per_day .le. 1))                     ! 24h dumps       GMG1F404.200    
     &       .or. (ifind .eq. 1 .and. i_day .eq. 1 .and. ! dumps lt 24h    GMG1F404.201    
     &       i_hour .eq. (24/dumps_per_day))) then                         GMG1F404.202    
            ps_flag(1)=1                                   ! months        GMG1F404.203    
          elseif (ifind .eq. 2 .and.                                       GMG1F404.204    
     &           (i_day .eq. 1) .and. (i_hour .eq. 0) .and.                GMG1F404.205    
     &           mod(((i_month-1)-MEAN_REFTIMEim(2,IND_IM)),3).eq.0)       GMG1F404.206    
     &           then                                                      GMG1F404.207    
            ps_flag(2)=1                                   ! seasons       GMG1F404.208    
          elseif (ifind .eq. 3 .and.                                       GMG1F404.209    
     &           (i_day .eq. 1) .and. (i_hour .eq. 0) .and.                GMG1F404.210    
     &           mod(((i_month-3)-MEAN_REFTIMEim(2,IND_IM)),12).eq.0)      GMG1F404.211    
     &           then                                                      GMG1F404.212    
            ps_flag(3)=1                                   ! years         GMG1F404.213    
          endif                                                            GMG1F404.214    
        else  ! for 360d year, check using array of no. of mean dumps      GMG1F404.215    
        IF(STEP_DUMPS.LT.0)THEN                                            MEANCTL1.277    
          IF(IFIND.EQ.1)RESIDU=1-NMVALS(IFIND)                             MEANCTL1.278    
          IF(IFIND.NE.1)RESIDU=NMVALS(IFIND-1)-NMVALS(IFIND)               MEANCTL1.279    
        ELSE                                                               MEANCTL1.280    
          IF(IFIND.EQ.1)RESIDU=1                                           MEANCTL1.281    
          IF(IFIND.NE.1)RESIDU=NMVALS(IFIND-1)                             MEANCTL1.282    
        ENDIF                                                              MEANCTL1.283    
        IF(MOD(STEP_DUMPS,NMVALS(IFIND)).EQ.RESIDU)THEN                    MEANCTL1.284    
          PS_FLAG(IFIND)=1                                                 MEANCTL1.285    
        ENDIF                                                              MEANCTL1.286    
        endif  ! end of test on lclimrealyr and setting of PS_FLAG         GMG1F404.216    
C                                                                          MEANCTL1.287    
C      Set up flag for mean printing frequencies                           MEANCTL1.288    
C                                                                          MEANCTL1.289    
        IF(PRINT_FREQ(IFIND).NE.0)THEN                                     MEANCTL1.290    
          IF(MOD(STEP_DUMPS,PRINT_FREQ(IFIND)).EQ.0)THEN                   MEANCTL1.291    
            PRINT_FLAG(IFIND)=1                                            MEANCTL1.292    
          ENDIF                                                            MEANCTL1.293    
        ENDIF                                                              MEANCTL1.294    
C                                                                          MEANCTL1.295    
      ENDDO       ! end of loop over IFIND from 1 to NMEANS                GMG1F404.217    
C                                                                          MEANCTL1.297    
C      Set up unit numbers for partial sum dumps                           MEANCTL1.298    
C                                                                          MEANCTL1.299    
      IF (IND_IM.EQ.1) THEN                                                GRB1F305.379    
        FT_PS(1,1)=23                                                      MEANCTL1.301    
        FT_PS(1,2)=24                                                      MEANCTL1.302    
      ELSE                                                                 MEANCTL1.303    
        FT_PS(1,1)=43                                                      MEANCTL1.304    
        FT_PS(1,2)=44                                                      MEANCTL1.305    
      ENDIF                                                                MEANCTL1.306    
      DO IFIND=2,4                                                         MEANCTL1.307    
        FT_PS(IFIND,1)=25                                                  MEANCTL1.308    
        FT_PS(IFIND,2)=26                                                  MEANCTL1.309    
      ENDDO                                                                MEANCTL1.310    
C Units must still be alternated as 3 may be open at a time                MEANCTL1.311    
      FT_PS(3,1)=45                                                        MEANCTL1.312    
      FT_PS(3,2)=46                                                        MEANCTL1.313    
CL                                                                         MEANCTL1.314    
CL**********************************************************************   MEANCTL1.315    
CL                  LOGICAL SUB-PROCESS C51                                MEANCTL1.316    
CL     Start of default process: updating period_1 partial sum data        MEANCTL1.317    
CL**********************************************************************   MEANCTL1.318    
CL                                                                         MEANCTL1.319    
C                                                                          MEANCTL1.320    
      IF(RUN_MEANCTL_RESTART.EQ.0)THEN                                     MEANCTL1.321    
C                                                                          MEANCTL1.322    
        INDEX_READ=RUN_MEANCTL_INDICim(1,IND_IM)                           GRB1F305.380    
        INDEX_WRITE=3-RUN_MEANCTL_INDICim(1,IND_IM)                        GRB1F305.381    
        FT_READ=FT_PS(1,INDEX_READ)                                        MEANCTL1.325    
        FT_WRITE=FT_PS(1,INDEX_WRITE)                                      MEANCTL1.326    
C                                                                          MEANCTL1.327    
C      Temporary check on unit numbers                                     MEANCTL1.328    
C                                                                          MEANCTL1.329    
        IF(PS_FLAG(1).NE.1)THEN                                            MEANCTL1.330    
          WRITE(6,*) 'Period_1 data read from unit number ',FT_READ        GIE0F403.397    
        ENDIF                                                              MEANCTL1.332    
        WRITE(6,*) 'Period_1 data written to unit number ',FT_WRITE        GIE0F403.398    
C                                                                          MEANCTL1.334    
CL                                                                         MEANCTL1.335    
CL                           STEP 1                                        MEANCTL1.336    
CL     Update or create period_1 partial sum data and write out            MEANCTL1.337    
CL     to period_1 partial sum dump                                        MEANCTL1.338    
CL                                                                         MEANCTL1.339    
c                                                                          GBC6F404.96     
c--preset the file lengths prior to the open                               GBC6F404.97     
c                                                                          GBC6F404.98     
c--check and reset, if necessary, the dumpfiles addresses                  GBC6F404.99     
*IF DEF,ATMOS                                                              GBC6F404.100    
        if(ind_im.eq.1) then                                               GBC6F404.101    
          call set_dumpfile_address(                                       GBC6F404.102    
     &     a_fixhd, len_fixhd,                                             GBC6F404.103    
     &     a_lookup, len1_lookup, a_len2_lookup,                           GBC6F404.104    
     &     number_of_data_words_in_memory, number_of_data_words_on_disk,   GBC6F404.105    
     &     disk_address)                                                   GBC6F404.106    
        endif                                                              GBC6F404.107    
*ENDIF                                                                     GBC6F404.108    
*IF DEF,OCEAN                                                              GBC6F404.109    
        if(ind_im.eq.2) then                                               GBC6F404.110    
          call set_dumpfile_address(                                       GBC6F404.111    
     &     o_fixhd, len_fixhd,                                             GBC6F404.112    
     &     o_lookup, len1_lookup, o_len2_lookup,                           GBC6F404.113    
     &     number_of_data_words_in_memory, number_of_data_words_on_disk,   GBC6F404.114    
     &     disk_address)                                                   GBC6F404.115    
        endif                                                              GBC6F404.116    
*ENDIF                                                                     GBC6F404.117    
c                                                                          GBC6F404.118    
c--pass the new file length to the I/O routines                            GBC6F404.119    
        call set_dumpfile_length(ft_read , disk_address)                   GBC6F404.120    
        call set_dumpfile_length(ft_write, disk_address)                   GBC6F404.121    
C                                                                          MEANCTL1.340    
C      Open input and output partial sum files (preassigned names)         MEANCTL1.341    
C                                                                          MEANCTL1.342    
        CALL FILE_OPEN(FT_READ,FT_ENVIRON(FT_READ),                        GPB1F305.59     
     &                 LEN_FT_ENVIR(FT_READ),1,0,ICODE)                    GPB1F305.60     
        IF(ICODE.NE.0)GOTO999                                              MEANCTL1.345    
        CALL FILE_OPEN(FT_WRITE,FT_ENVIRON(FT_WRITE),                      GPB1F305.61     
     &                 LEN_FT_ENVIR(FT_WRITE),1,0,ICODE)                   GPB1F305.62     
        IF(ICODE.NE.0)GOTO999                                              MEANCTL1.348    
C--zero the file lengths                                                   GBC6F404.122    
        call set_dumpfile_length(ft_read , 0)                              GBC6F404.123    
        call set_dumpfile_length(ft_write, 0)                              GBC6F404.124    
C                                                                          MEANCTL1.349    
*IF DEF,ATMOS                                                              MEANCTL1.350    
        IF(IND_IM.EQ.1)THEN                                                GRB1F305.382    
      D1_ADDR_SUBMODEL_ID = SUBMODEL_FOR_SM(1)                             GSM1F403.178    
          CALL ACUMPS( A_FIXHD, LEN_FIXHD,                                 GKR1F402.2      
     &      A_INTHD, A_LEN_INTHD,                                          GKR1F402.3      
     &      A_REALHD, A_LEN_REALHD,                                        GKR1F402.4      
     &      A_LEVDEPC, A_LEN1_LEVDEPC, A_LEN2_LEVDEPC,                     GKR1F402.5      
     &      A_ROWDEPC, A_LEN1_ROWDEPC, A_LEN2_ROWDEPC,                     GKR1F402.6      
     &      A_COLDEPC, A_LEN1_COLDEPC, A_LEN2_COLDEPC,                     GKR1F402.7      
     &      A_FLDDEPC, A_LEN1_FLDDEPC, A_LEN2_FLDDEPC,                     GKR1F402.8      
     &      A_EXTCNST, A_LEN_EXTCNST,                                      GKR1F402.9      
     &      A_DUMPHIST, LEN_DUMPHIST,                                      GKR1F402.10     
     &      A_CFI1, A_LEN_CFI1,                                            GKR1F402.11     
     &      A_CFI2, A_LEN_CFI2,                                            GKR1F402.12     
     &      A_CFI3, A_LEN_CFI3,                                            GKR1F402.13     
     &      A_LOOKUP,LEN1_LOOKUP,A_LEN2_LOOKUP,                            GSM1F403.179    
     &      1,NO_OBJ_D1(D1_ADDR_SUBMODEL_ID),                              GSM1F403.180    
     &      D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID),                              GSM1F403.181    
*IF DEF,MPP                                                                GSM1F403.182    
     &      A_MPP_LOOKUP,MPP_LEN1_LOOKUP,                                  GSM1F403.183    
*ENDIF                                                                     GKR1F402.19     
     &      A_LEN_DATA,D1,D1,D1,IBUFLEN(1),                                GKR1F402.20     
     &      PS_FLAG(1),FT_READ,FT_WRITE,LCLIMREALYR,MEANLEV,               GMG1F404.218    
     &      I_MONTH,I_YEAR,                                                GMG1F404.219    
*CALL ARGPPX                                                               GDG0F401.837    
     &                ICODE,CMESSAGE)                                      GDG0F401.838    
        ENDIF                                                              MEANCTL1.357    
*ENDIF                                                                     MEANCTL1.358    
*IF DEF,OCEAN                                                              MEANCTL1.359    
        IF(IND_IM.EQ.2)THEN                                                GRB1F305.383    
      D1_ADDR_SUBMODEL_ID = SUBMODEL_FOR_SM(2)                             GSM1F403.184    
          CALL ACUMPS( O_FIXHD, LEN_FIXHD,                                 GKR1F402.22     
     &      O_INTHD, O_LEN_INTHD,                                          GKR1F402.23     
     &      O_REALHD, O_LEN_REALHD,                                        GKR1F402.24     
     &      O_LEVDEPC, O_LEN1_LEVDEPC, O_LEN2_LEVDEPC,                     GKR1F402.25     
     &      O_ROWDEPC, O_LEN1_ROWDEPC, O_LEN2_ROWDEPC,                     GKR1F402.26     
     &      O_COLDEPC, O_LEN1_COLDEPC, O_LEN2_COLDEPC,                     GKR1F402.27     
     &      O_FLDDEPC, O_LEN1_FLDDEPC, O_LEN2_FLDDEPC,                     GKR1F402.28     
     &      O_EXTCNST, O_LEN_EXTCNST,                                      GKR1F402.29     
     &      O_DUMPHIST, LEN_DUMPHIST,                                      GKR1F402.30     
     &      O_CFI1, O_LEN_CFI1,                                            GKR1F402.31     
     &      O_CFI2, O_LEN_CFI2,                                            GKR1F402.32     
     &      O_CFI3, O_LEN_CFI3,                                            GKR1F402.33     
     &      O_LOOKUP,LEN1_LOOKUP,O_LEN2_LOOKUP,                            GSM1F403.185    
     &      2,NO_OBJ_D1(D1_ADDR_SUBMODEL_ID),                              GSM1F403.186    
     &      D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID),                              GSM1F403.187    
*IF DEF,MPP                                                                GSM1F403.188    
     &      O_MPP_LOOKUP,MPP_LEN1_LOOKUP,                                  GSM1F403.189    
*ENDIF                                                                     GKR1F402.39     
     &      O_LEN_DATA,D1,D1,D1,IBUFLEN(2),                                GKR1F402.40     
     &      PS_FLAG(1),FT_READ,FT_WRITE,LCLIMREALYR,MEANLEV,               GMG1F404.220    
     &      I_MONTH,I_YEAR,                                                GMG1F404.221    
*CALL ARGPPX                                                               GDG0F401.843    
     &                ICODE,CMESSAGE)                                      GDG0F401.844    
        ENDIF                                                              MEANCTL1.366    
*ENDIF                                                                     MEANCTL1.367    
C                                                                          MEANCTL1.368    
C      Check return code from ACUMPS                                       MEANCTL1.369    
C                                                                          MEANCTL1.370    
        IF(ICODE.NE.0)THEN                                                 MEANCTL1.371    
          WRITE(6,*) 'MEANCTL: RESTART AT PERIOD_',RUN_MEANCTL_RESTART     GIE0F403.399    
          GOTO 999                                                         MEANCTL1.373    
        ENDIF                                                              MEANCTL1.374    
C                                                                          MEANCTL1.375    
C      Close input and output partial sum files                            MEANCTL1.376    
C                                                                          MEANCTL1.377    
        CALL FILE_CLOSE(FT_READ,FT_ENVIRON(FT_READ),                       GTD0F400.7      
     &                  LEN_FT_ENVIR(FT_READ),0,1,ICODE)                   GTD0F400.8      
        CALL FILE_CLOSE(FT_WRITE,FT_ENVIRON(FT_WRITE),                     GTD0F400.9      
     &                  LEN_FT_ENVIR(FT_WRITE),0,0,ICODE)                  GTD0F400.10     
C                                                                          MEANCTL1.382    
        INDEXL=INDEXL+1                                                    MEANCTL1.383    
C                                                                          MEANCTL1.384    
C      Update RUN_MEANCTL_INDICim for period_1 data                        GRB1F305.384    
C                                                                          MEANCTL1.386    
        RUN_MEANCTL_INDICim(1,IND_IM)=3-RUN_MEANCTL_INDICim(1,IND_IM)      GRB1F305.385    
C                                                                          MEANCTL1.388    
      ENDIF                                                                MEANCTL1.389    
CL                                                                         MEANCTL1.390    
CL**********************************************************************   MEANCTL1.391    
CL     End of default process: updating period_1 partial sum data          MEANCTL1.392    
CL**********************************************************************   MEANCTL1.393    
CL                                                                         MEANCTL1.394    
      IF(MEANS_TOTAL.GT.0)THEN                                             MEANCTL1.395    
CL                                                                         MEANCTL1.396    
CL**********************************************************************   MEANCTL1.397    
CL                  LOGICAL SUB-PROCESS C52                                MEANCTL1.398    
CL     Start of means processing and updating of subsequent                MEANCTL1.399    
CL     partial sum dump                                                    MEANCTL1.400    
CL**********************************************************************   MEANCTL1.401    
CL                                                                         MEANCTL1.402    
CL                 STEP 1                                                  MEANCTL1.403    
CL     Copy instantaneous dump to SSD                                      MEANCTL1.404    
CL                                                                         MEANCTL1.405    
CL     NB: This must include any "secondary fields" which are used on      MEANCTL1.406    
CL         the following timestep if they are modified in making means -   MEANCTL1.407    
CL         P_EXNER is in this class in the atmosphere case.                MEANCTL1.408    
CL                                                                         MEANCTL1.409    
c                                                                          GBC6F404.125    
c--compute the maximum length for the FT_SSD File                          GBC6F404.126    
         maximum_file_length=0                                             GBC6F404.127    
*IF DEF,ATMOS                                                              GBC6F404.128    
         maximum_file_length=max(maximum_file_length,                      GBC6F404.129    
     2    a_len_data+(p_levels+1)*p_field)                                 GBC6F404.130    
*ENDIF                                                                     GBC6F404.131    
*IF DEF,OCEAN                                                              GBC6F404.132    
         maximum_file_length=max(maximum_file_length,                      GBC6F404.133    
     2    o_len_data)                                                      GBC6F404.134    
*ENDIF                                                                     GBC6F404.135    
c--set the length of the file needed                                       GBC6F404.136    
        call set_dumpfile_length(ft_ssd, maximum_file_length)              GBC6F404.137    
c                                                                          GBC6F404.138    
*IF DEF,ATMOS                                                              MEANCTL1.410    
        IF(IND_IM.EQ.1)THEN                                                GRB1F305.386    
          CALL TRANSOUT(                                                   @DYALLOC.2284   
*CALL ARGD1                                                                @DYALLOC.2285   
     &                  A_LEN_DATA+(P_LEVELS+1)*P_FIELD,FT_SSD,IND_IM      GRR1F402.320    
     &    ,ICODE,CMESSAGE)                                                 MEANCTL1.413    
        ENDIF                                                              MEANCTL1.414    
*ENDIF                                                                     MEANCTL1.415    
*IF DEF,OCEAN                                                              MEANCTL1.416    
        IF(IND_IM.EQ.2)THEN                                                GRB1F305.387    
          CALL TRANSOUT(                                                   @DYALLOC.2287   
*CALL ARGD1                                                                @DYALLOC.2288   
     &                  O_LEN_DATA,FT_SSD,IND_IM                           GRR1F402.321    
     &    ,ICODE,CMESSAGE)                                                 MEANCTL1.419    
        ENDIF                                                              MEANCTL1.420    
*ENDIF                                                                     MEANCTL1.421    
C                                                                          MEANCTL1.422    
C      Check return code from TRANSOUT                                     MEANCTL1.423    
C                                                                          MEANCTL1.424    
        IF(ICODE.NE.0)THEN                                                 MEANCTL1.425    
          RUN_MEANCTL_RESTART=1                                            MEANCTL1.426    
          WRITE(6,*) 'MEANCTL: RESTART AT PERIOD_',RUN_MEANCTL_RESTART     GIE0F403.400    
          GOTO 999                                                         MEANCTL1.428    
        ENDIF                                                              MEANCTL1.429    
C                                                                          MEANCTL1.430    
C       CALL SETPOS(FT_SSD,0,ICODE)                                        GTD0F400.95     
        CALL FILE_CLOSE(FT_SSD,FT_ENVIRON(FT_SSD),                         GTD0F400.11     
     &                  LEN_FT_ENVIR(FT_SSD),0,0,ICODE)                    GTD0F400.12     
C                                                                          MEANCTL1.434    
        DO MEANLEV=INDEXL,MEANS_TOTAL                                      MEANCTL1.435    
C                                                                          MEANCTL1.436    
          INDEX_READ=RUN_MEANCTL_INDICim(MEANLEV,IND_IM)                   GRB1F305.388    
          FT_READ=FT_PS(MEANLEV,INDEX_READ)                                MEANCTL1.438    
C                                                                          MEANCTL1.439    
C      Temporary check on unit number                                      MEANCTL1.440    
C                                                                          MEANCTL1.441    
        WRITE(6,*) 'Period_',MEANLEV,' data read:unit number ',FT_READ     GIE0F403.401    
CL                                                                         MEANCTL1.443    
CL                             STEP 2                                      MEANCTL1.444    
CL     Generate period_N time-meaned data and store in main data block     MEANCTL1.445    
CL                                                                         MEANCTL1.446    
!       If real-period meaning selected, find length of current period     GMG1F404.222    
        IF (LCLIMREALYR) THEN                                              GMG1F404.223    
          CALL SETPERLEN (MEANLEV,I_MONTH,I_YEAR,PERIODLEN)                GMG1F404.224    
          if (meanlev.eq.1) then ! divisor only needs to be in terms       GMG1F404.225    
                                 ! of restart dumps for Period_1           GMG1F404.226    
            PERIODLENDM=PERIODLEN*DUMPS_PER_DAY                            GMG1F404.227    
          else                                                             GMG1F404.228    
            PERIODLENDM=PERIODLEN                                          GMG1F404.229    
          endif                                                            GMG1F404.230    
        ENDIF                                                              GMG1F404.231    
*IF DEF,ATMOS                                                              MEANCTL1.447    
          IF(IND_IM.EQ.1)THEN                                              GRB1F305.389    
C                                                                          MEANCTL1.449    
C      Open input partial sum file (preassigned or calculated name)        MEANCTL1.450    
C                                                                          MEANCTL1.451    
c--check and reset, if necessary, the dumpfiles addresses                  GBC6F404.139    
            call set_dumpfile_address(                                     GBC6F404.140    
     &       a_fixhd, len_fixhd,                                           GBC6F404.141    
     &       a_lookup, len1_lookup, a_len2_lookup,                         GBC6F404.142    
     &       number_of_data_words_in_memory,                               GBC6F404.143    
     &       number_of_data_words_on_disk,                                 GBC6F404.144    
     &       disk_address)                                                 GBC6F404.145    
c--pass the new file length to the I/O routines                            GBC6F404.146    
            call set_dumpfile_length(ft_read , disk_address)               GBC6F404.147    
            IF (MEANLEV.EQ.1) THEN                                         MEANCTL1.452    
        CALL FILE_OPEN(FT_READ,FT_ENVIRON(FT_READ),                        GPB1F305.66     
     &            LEN_FT_ENVIR(FT_READ),1,0,ICODE)                         GPB1F305.67     
        IF(ICODE.NE.0)GOTO999                                              MEANCTL1.455    
            ELSE                                                           MEANCTL1.456    
              CALL GET_NAME(EXPT_ID,JOB_ID,IND_IM,MEANLEV,INDEX_READ,      GRB1F305.390    
     &                      REINIT_STEPS,'s',LETTER_3,                     MEANCTL1.458    
     &                      MODEL_STATUS,TIME_CONVENTION,                  MEANCTL1.459    
     &                       0,PSNAME_READ,ICODE,CMESSAGE,LCAL360)         GSS1F304.463    
              IF (ICODE.GT.0) GOTO 999                                     MEANCTL1.461    
              LEN_PSNAME=LEN(PSNAME_READ)                                  MEANCTL1.462    
              CALL FILE_OPEN(FT_READ,PSNAME_READ,LEN_PSNAME,1,1,ICODE)     GPB1F305.68     
              IF(ICODE.NE.0)GOTO999                                        MEANCTL1.464    
            ENDIF                                                          MEANCTL1.465    
c--unset the file length in the I/O routines                               GBC6F404.148    
            call set_dumpfile_length(ft_read , 0)                          GBC6F404.149    
C                                                                          MEANCTL1.466    
            IF (LCLIMREALYR) THEN  ! Real-period meaning selected          GMG1F404.232    
          CALL MEANPS( A_FIXHD, LEN_FIXHD,                                 GKR1F402.42     
     &      A_INTHD, A_LEN_INTHD,                                          GKR1F402.43     
     &      A_REALHD, A_LEN_REALHD,                                        GKR1F402.44     
     &      A_LEVDEPC, A_LEN1_LEVDEPC, A_LEN2_LEVDEPC,                     GKR1F402.45     
     &      A_ROWDEPC, A_LEN1_ROWDEPC, A_LEN2_ROWDEPC,                     GKR1F402.46     
     &      A_COLDEPC, A_LEN1_COLDEPC, A_LEN2_COLDEPC,                     GKR1F402.47     
     &      A_FLDDEPC, A_LEN1_FLDDEPC, A_LEN2_FLDDEPC,                     GKR1F402.48     
     &      A_EXTCNST, A_LEN_EXTCNST,                                      GKR1F402.49     
     &      A_DUMPHIST, LEN_DUMPHIST,                                      GKR1F402.50     
     &      A_CFI1, A_LEN_CFI1,                                            GKR1F402.51     
     &      A_CFI2, A_LEN_CFI2,                                            GKR1F402.52     
     &      A_CFI3, A_LEN_CFI3,                                            GKR1F402.53     
     &      A_LOOKUP,LEN1_LOOKUP,A_LEN2_LOOKUP,                            GSM1F403.190    
     &      1,NO_OBJ_D1(D1_ADDR_SUBMODEL_ID),                              GSM1F403.191    
     &      D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID),                              GSM1F403.192    
*IF DEF,MPP                                                                GSM1F403.193    
     &      A_MPP_LOOKUP,MPP_LEN1_LOOKUP,                                  GSM1F403.194    
*ENDIF                                                                     GKR1F402.59     
     &      A_LEN_DATA,D1,D1,D1,IBUFLEN(1),                                GKR1F402.60     
     &                  FT_READ,PERIODLENDM,                               GMG1F404.233    
*CALL ARGPPX                                                               GMG1F404.234    
     &                  ICODE,CMESSAGE)                                    GMG1F404.235    
            else            ! 360d year meaning selected                   GMG1F404.236    
              CALL MEANPS( A_FIXHD, LEN_FIXHD,                             GMG1F404.237    
     &      A_INTHD, A_LEN_INTHD,                                          GMG1F404.238    
     &      A_REALHD, A_LEN_REALHD,                                        GMG1F404.239    
     &      A_LEVDEPC, A_LEN1_LEVDEPC, A_LEN2_LEVDEPC,                     GMG1F404.240    
     &      A_ROWDEPC, A_LEN1_ROWDEPC, A_LEN2_ROWDEPC,                     GMG1F404.241    
     &      A_COLDEPC, A_LEN1_COLDEPC, A_LEN2_COLDEPC,                     GMG1F404.242    
     &      A_FLDDEPC, A_LEN1_FLDDEPC, A_LEN2_FLDDEPC,                     GMG1F404.243    
     &      A_EXTCNST, A_LEN_EXTCNST,                                      GMG1F404.244    
     &      A_DUMPHIST, LEN_DUMPHIST,                                      GMG1F404.245    
     &      A_CFI1, A_LEN_CFI1,                                            GMG1F404.246    
     &      A_CFI2, A_LEN_CFI2,                                            GMG1F404.247    
     &      A_CFI3, A_LEN_CFI3,                                            GMG1F404.248    
     &      A_LOOKUP,LEN1_LOOKUP,A_LEN2_LOOKUP,                            GMG1F404.249    
     &      1,NO_OBJ_D1(D1_ADDR_SUBMODEL_ID),                              GMG1F404.250    
     &      D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID),                              GMG1F404.251    
*IF DEF,MPP                                                                GMG1F404.252    
     &      A_MPP_LOOKUP,MPP_LEN1_LOOKUP,                                  GMG1F404.253    
*ENDIF                                                                     GMG1F404.254    
     &      A_LEN_DATA,D1,D1,D1,IBUFLEN(1),                                GMG1F404.255    
     &                  FT_READ,MEANFREQim(MEANLEV,IND_IM),                GDG0F401.848    
*CALL ARGPPX                                                               GDG0F401.849    
     &                  ICODE,CMESSAGE)                                    GDG0F401.850    
            ENDIF            ! end of test on LCLIMREALYR                  GMG1F404.256    
          ENDIF            ! end of test on IND_IM.EQ.1                    GMG1F404.257    
*ENDIF                                                                     MEANCTL1.473    
*IF DEF,OCEAN                                                              MEANCTL1.474    
          IF(IND_IM.EQ.2)THEN                                              GRB1F305.392    
C                                                                          MEANCTL1.476    
C      Open input partial sum file (preassigned or calculated name)        MEANCTL1.477    
C                                                                          MEANCTL1.478    
c--check and reset, if necessary, the dumpfiles addresses                  GBC6F404.150    
            call set_dumpfile_address(                                     GBC6F404.151    
     &       o_fixhd, len_fixhd,                                           GBC6F404.152    
     &       o_lookup, len1_lookup, o_len2_lookup,                         GBC6F404.153    
     &       number_of_data_words_in_memory,                               GBC6F404.154    
     &       number_of_data_words_on_disk,                                 GBC6F404.155    
     &       disk_address)                                                 GBC6F404.156    
c--pass the new file length to the I/O routines                            GBC6F404.157    
            call set_dumpfile_length(ft_read , disk_address)               GBC6F404.158    
            IF (MEANLEV.EQ.1) THEN                                         MEANCTL1.479    
        CALL FILE_OPEN(FT_READ,FT_ENVIRON(FT_READ),                        GPB1F305.69     
     &            LEN_FT_ENVIR(FT_READ),1,0,ICODE)                         GPB1F305.70     
        IF(ICODE.NE.0)GOTO999                                              MEANCTL1.482    
            ELSE                                                           MEANCTL1.483    
              CALL GET_NAME(EXPT_ID,JOB_ID,IND_IM,MEANLEV,INDEX_READ,      GRB1F305.393    
     &                      REINIT_STEPS,'s',LETTER_3,                     MEANCTL1.485    
     &                      MODEL_STATUS,TIME_CONVENTION,                  MEANCTL1.486    
     &                       0,PSNAME_READ,ICODE,CMESSAGE,LCAL360)         GSS1F304.464    
              IF (ICODE.GT.0) GOTO 999                                     MEANCTL1.488    
              LEN_PSNAME=LEN(PSNAME_READ)                                  MEANCTL1.489    
              CALL FILE_OPEN(FT_READ,PSNAME_READ,LEN_PSNAME,1,1,ICODE)     GPB1F305.71     
              IF(ICODE.NE.0)GOTO999                                        MEANCTL1.491    
            ENDIF                                                          MEANCTL1.492    
c--unset the file length in the I/O routines                               GBC6F404.159    
            call set_dumpfile_length(ft_read , 0)                          GBC6F404.160    
C                                                                          MEANCTL1.493    
            IF (LCLIMREALYR) THEN                                          GMG1F404.258    
          CALL MEANPS( O_FIXHD, LEN_FIXHD,                                 GKR1F402.61     
     &      O_INTHD, O_LEN_INTHD,                                          GKR1F402.62     
     &      O_REALHD, O_LEN_REALHD,                                        GKR1F402.63     
     &      O_LEVDEPC, O_LEN1_LEVDEPC, O_LEN2_LEVDEPC,                     GKR1F402.64     
     &      O_ROWDEPC, O_LEN1_ROWDEPC, O_LEN2_ROWDEPC,                     GKR1F402.65     
     &      O_COLDEPC, O_LEN1_COLDEPC, O_LEN2_COLDEPC,                     GKR1F402.66     
     &      O_FLDDEPC, O_LEN1_FLDDEPC, O_LEN2_FLDDEPC,                     GKR1F402.67     
     &      O_EXTCNST, O_LEN_EXTCNST,                                      GKR1F402.68     
     &      O_DUMPHIST, LEN_DUMPHIST,                                      GKR1F402.69     
     &      O_CFI1, O_LEN_CFI1,                                            GKR1F402.70     
     &      O_CFI2, O_LEN_CFI2,                                            GKR1F402.71     
     &      O_CFI3, O_LEN_CFI3,                                            GKR1F402.72     
     &      O_LOOKUP,LEN1_LOOKUP,O_LEN2_LOOKUP,                            GSM1F403.195    
     &      2,NO_OBJ_D1(D1_ADDR_SUBMODEL_ID),                              GSM1F403.196    
     &      D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID),                              GSM1F403.197    
*IF DEF,MPP                                                                GSM1F403.198    
     &      O_MPP_LOOKUP,MPP_LEN1_LOOKUP,                                  GSM1F403.199    
*ENDIF                                                                     GKR1F402.78     
     &      O_LEN_DATA,D1,D1,D1,IBUFLEN(2),                                GKR1F402.79     
     &                  FT_READ,PERIODLENDM,                               GMG1F404.259    
*CALL ARGPPX                                                               GMG1F404.260    
     &                  ICODE,CMESSAGE)                                    GMG1F404.261    
            else            ! 360d year meaning selected                   GMG1F404.262    
              CALL MEANPS( O_FIXHD, LEN_FIXHD,                             GMG1F404.263    
     &      O_INTHD, O_LEN_INTHD,                                          GMG1F404.264    
     &      O_REALHD, O_LEN_REALHD,                                        GMG1F404.265    
     &      O_LEVDEPC, O_LEN1_LEVDEPC, O_LEN2_LEVDEPC,                     GMG1F404.266    
     &      O_ROWDEPC, O_LEN1_ROWDEPC, O_LEN2_ROWDEPC,                     GMG1F404.267    
     &      O_COLDEPC, O_LEN1_COLDEPC, O_LEN2_COLDEPC,                     GMG1F404.268    
     &      O_FLDDEPC, O_LEN1_FLDDEPC, O_LEN2_FLDDEPC,                     GMG1F404.269    
     &      O_EXTCNST, O_LEN_EXTCNST,                                      GMG1F404.270    
     &      O_DUMPHIST, LEN_DUMPHIST,                                      GMG1F404.271    
     &      O_CFI1, O_LEN_CFI1,                                            GMG1F404.272    
     &      O_CFI2, O_LEN_CFI2,                                            GMG1F404.273    
     &      O_CFI3, O_LEN_CFI3,                                            GMG1F404.274    
     &      O_LOOKUP,LEN1_LOOKUP,O_LEN2_LOOKUP,                            GMG1F404.275    
     &      2,NO_OBJ_D1(D1_ADDR_SUBMODEL_ID),                              GMG1F404.276    
     &      D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID),                              GMG1F404.277    
*IF DEF,MPP                                                                GMG1F404.278    
     &      O_MPP_LOOKUP,MPP_LEN1_LOOKUP,                                  GMG1F404.279    
*ENDIF                                                                     GMG1F404.280    
     &      O_LEN_DATA,D1,D1,D1,IBUFLEN(2),                                GMG1F404.281    
     &                  FT_READ,MEANFREQim(MEANLEV,IND_IM),                GDG0F401.854    
*CALL ARGPPX                                                               GDG0F401.855    
     &                  ICODE,CMESSAGE)                                    GDG0F401.856    
            ENDIF          ! end of IF test on LCLIMREALYR                 GMG1F404.282    
          ENDIF          ! end of IF test on IND_IM.EQ.2                   GMG1F404.283    
*ENDIF                                                                     MEANCTL1.500    
C                                                                          MEANCTL1.501    
C      Check return code from MEANPS                                       MEANCTL1.502    
C                                                                          MEANCTL1.503    
          IF(ICODE.NE.0)THEN                                               MEANCTL1.504    
            RUN_MEANCTL_RESTART=MEANLEV                                    MEANCTL1.505    
            WRITE(6,*) 'MEANCTL: RESTART AT PERIOD_',RUN_MEANCTL_RESTART   GIE0F403.402    
            GOTO 999                                                       MEANCTL1.507    
          ENDIF                                                            MEANCTL1.508    
C                                                                          MEANCTL1.509    
        PSNAME_DELETE=PSNAME_READ                                          MEANCTL1.510    
          CALL SETPOS(FT_READ,0,ICODE)                                     GTD0F400.96     
          FT_DELETE=FT_READ                                                MEANCTL1.512    
CL                                                                         MEANCTL1.513    
CL                          STEP 3.1                                       MEANCTL1.514    
CL     Calculate mean diagnostics and extract PPfields from mean data      MEANCTL1.515    
CL                                                                         MEANCTL1.516    
*IF DEF,ATMOS                                                              MEANCTL1.517    
          IF (IND_IM.EQ.1) THEN                                            GRB1F305.395    
C Set P_EXNER from mean primary fields                                     MEANCTL1.519    
            CALL SETEXNER (                                                @DYALLOC.2292   
*CALL ARGSIZE                                                              @DYALLOC.2293   
*CALL ARGD1                                                                @DYALLOC.2294   
*CALL ARGPTRA                                                              @DYALLOC.2295   
*CALL ARGCONA                                                              @DYALLOC.2296   
     *                     ICODE,CMESSAGE)                                 @DYALLOC.2297   
C                                                                          @DYALLOC.2298   
*IF DEF,MPP                                                                GPB2F405.89     
! Find the largest output field size to dimension I/O buffer array         GPB2F405.90     
            maxsize=1                                                      GPB2F405.91     
                                                                           GPB2F405.92     
            DO IE=1,TOTITEMS                                               GPB2F405.93     
              tag=STLIST(st_macrotag,IE)/1000                              GPB2F405.94     
              IF (MOD(tag/(2**(MEANLEV-1)),2) .EQ. 1) THEN                 GPB2F405.95     
                maxsize=MAX(maxsize,                                       GPB2F405.96     
     &                      STLIST(st_dump_output_length,IE))              GPB2F405.97     
              ENDIF                                                        GPB2F405.98     
            ENDDO                                                          GPB2F405.99     
*ENDIF                                                                     GPB2F405.100    
! Extract mean diagnostics (both normal and sections 21-24/41-44)          GMG1F404.284    
            CALL MEANDIAG (                                                @DYALLOC.2299   
*CALL ARGSIZE                                                              @DYALLOC.2300   
*CALL ARGD1                                                                @DYALLOC.2301   
*CALL ARGDUMA                                                              @DYALLOC.2302   
*CALL ARGDUMO                                                              @DYALLOC.2303   
*CALL ARGDUMW                                                              GKR1F401.228    
*CALL ARGSTS                                                               @DYALLOC.2304   
*CALL ARGPTRA                                                              @DYALLOC.2305   
*CALL ARGPTRO                                                              @DYALLOC.2306   
*CALL ARGCONA                                                              @DYALLOC.2307   
*CALL ARGINFA                                                              @DYALLOC.2308   
*CALL ARGINFO                                                              GMB1F405.405    
*CALL ARGPPX                                                               GKR0F305.955    
*CALL ARGFLDPT                                                             GSM1F405.500    
     *       IND_IM,MEANLEV,PP_LEN2_MEANim(MEANLEV,IND_IM),STEP_DUMPS,     GRB1F305.396    
     &           NMVALS(MEANLEV),                                          GPB2F405.101    
*IF DEF,MPP                                                                GPB2F405.102    
     &           maxsize,                                                  GPB2F405.103    
*ENDIF                                                                     GPB2F405.104    
     &           ICODE,CMESSAGE)                                           GPB2F405.105    
          ENDIF                                                            MEANCTL1.525    
*ENDIF                                                                     MEANCTL1.526    
*IF DEF,OCEAN                                                              MEANCTL1.527    
          IF (IND_IM.EQ.2) THEN                                            GRB1F305.397    
*IF DEF,MPP                                                                GPB2F405.106    
! Find the largest output field size to dimension I/O buffer array         GPB2F405.107    
            maxsize=1                                                      GPB2F405.108    
                                                                           GPB2F405.109    
            DO IE=1,TOTITEMS                                               GPB2F405.110    
              tag=STLIST(st_macrotag,IE)/1000                              GPB2F405.111    
              IF (MOD(tag/(2**(MEANLEV-1)),2) .EQ. 1) THEN                 GPB2F405.112    
                maxsize=MAX(maxsize,                                       GPB2F405.113    
     &                      STLIST(st_dump_output_length,IE))              GPB2F405.114    
              ENDIF                                                        GPB2F405.115    
            ENDDO                                                          GPB2F405.116    
*ENDIF                                                                     GPB2F405.117    
            CALL MEANDIAG (                                                @DYALLOC.2312   
*CALL ARGSIZE                                                              @DYALLOC.2313   
*CALL ARGD1                                                                @DYALLOC.2314   
*CALL ARGDUMA                                                              @DYALLOC.2315   
*CALL ARGDUMO                                                              @DYALLOC.2316   
*CALL ARGDUMW                                                              GKR1F401.229    
*CALL ARGSTS                                                               @DYALLOC.2317   
*CALL ARGPTRA                                                              @DYALLOC.2318   
*CALL ARGPTRO                                                              @DYALLOC.2319   
*CALL ARGCONA                                                              @DYALLOC.2320   
*CALL ARGINFA                                                              @DYALLOC.2321   
*CALL ARGINFO                                                              GMB1F405.406    
*CALL ARGPPX                                                               ORH1F400.1      
*IF DEF,ATMOS                                                              GSM1F405.501    
*CALL ARGFLDPT                                                             GSM1F405.502    
*ENDIF                                                                     GSM1F405.503    
     *       IND_IM,MEANLEV,PP_LEN2_MEANim(MEANLEV,IND_IM),STEP_DUMPS,     GRB1F305.398    
     &           NMVALS(MEANLEV),                                          GPB2F405.118    
*IF DEF,MPP                                                                GPB2F405.119    
     &           maxsize,                                                  GPB2F405.120    
*ENDIF                                                                     GPB2F405.121    
     &           ICODE,CMESSAGE)                                           GPB2F405.122    
          ENDIF                                                            @DYALLOC.2324   
*ENDIF                                                                     MEANCTL1.532    
          IF (ICODE.GT.0) GOTO 999                                         MEANCTL1.533    
CL                                                                         MEANCTL1.534    
CL                          STEP 3.2                                       MEANCTL1.535    
CL     Calculate zonal means from period_N time-meaned data                MEANCTL1.536    
CL                                                                         MEANCTL1.537    
          IF(PRINT_FLAG(MEANLEV).EQ.1)THEN                                 MEANCTL1.538    
            WRITE(6,*) 'Print statistics for period_',MEANLEV,' mean'      GIE0F403.403    
            CALL PRINTCTL (                                                @DYALLOC.2325   
*CALL ARGSIZE                                                              @DYALLOC.2326   
*CALL ARGD1                                                                @DYALLOC.2327   
*CALL ARGDUMA                                                              @DYALLOC.2328   
*CALL ARGPTRA                                                              @DYALLOC.2329   
*CALL ARGCONA                                                              @DYALLOC.2330   
     +                     IND_IM,MEANLEV,ICODE,CMESSAGE)                  GRB1F400.62     
          ENDIF                                                            MEANCTL1.541    
          IF (ICODE.GT.0) GOTO 999                                         MEANCTL1.542    
CL                                                                         MEANCTL1.543    
CL                          STEP 4                                         MEANCTL1.544    
CL     Check to see if period_N+1 partial sum data needs to updated        MEANCTL1.545    
CL     or created.                                                         MEANCTL1.546    
CL     If so, proceed and write out to period_N+1 partial sum dump         MEANCTL1.547    
CL                                                                         MEANCTL1.548    
          IF(MEANLEV.NE.NMEANS)THEN                                        MEANCTL1.549    
C                                                                          MEANCTL1.550    
            INDEX_READ=RUN_MEANCTL_INDICim(MEANLEV+1,IND_IM)               GRB1F305.400    
            INDEX_WRITE=3-RUN_MEANCTL_INDICim(MEANLEV+1,IND_IM)            GRB1F305.401    
            FT_READ=FT_PS(MEANLEV+1,INDEX_READ)                            MEANCTL1.553    
            FT_WRITE=FT_PS(MEANLEV+1,INDEX_WRITE)                          MEANCTL1.554    
C                                                                          MEANCTL1.555    
C      Temporary check on unit numbers                                     MEANCTL1.556    
C                                                                          MEANCTL1.557    
        IF(PS_FLAG(MEANLEV+1).NE.1)THEN                                    MEANCTL1.558    
      WRITE(6,*) 'Period_',MEANLEV+1,' data read:unit number ',FT_READ     GIE0F403.404    
        ENDIF                                                              MEANCTL1.560    
        WRITE(6,*) 'Period_',MEANLEV+1,' data written:unit number ',       GIE0F403.405    
     *          FT_WRITE                                                   MEANCTL1.562    
C                                                                          MEANCTL1.563    
*IF DEF,ATMOS                                                              MEANCTL1.564    
            IF(IND_IM.EQ.1)THEN                                            GRB1F305.402    
C                                                                          MEANCTL1.596    
C      Open input and output partial sum files (calculated names)          MEANCTL1.597    
C                                                                          MEANCTL1.598    
              CALL GET_NAME(EXPT_ID,JOB_ID,IND_IM,MEANLEV+1,INDEX_READ,    GRB1F305.403    
     &                      REINIT_STEPS,'s',LETTER_3,                     MEANCTL1.600    
     &                      MODEL_STATUS,TIME_CONVENTION,                  MEANCTL1.601    
     &                       0,PSNAME_READ,ICODE,CMESSAGE,LCAL360)         GSS1F304.468    
              IF (ICODE.GT.0) GOTO 999                                     MEANCTL1.603    
c--check and reset, if necessary, the dumpfiles addresses                  GBC6F404.161    
              call set_dumpfile_address(                                   GBC6F404.162    
     &         a_fixhd, len_fixhd,                                         GBC6F404.163    
     &         a_lookup, len1_lookup, a_len2_lookup,                       GBC6F404.164    
     &         number_of_data_words_in_memory,                             GBC6F404.165    
     &         number_of_data_words_on_disk,                               GBC6F404.166    
     &         disk_address)                                               GBC6F404.167    
c--pass the new file length to the I/O routines                            GBC6F404.168    
              call set_dumpfile_length(ft_read , disk_address)             GBC6F404.169    
              LEN_PSNAME=LEN(PSNAME_READ)                                  MEANCTL1.604    
              CALL FILE_OPEN(FT_READ,PSNAME_READ,LEN_PSNAME,1,1,ICODE)     GPB1F305.72     
              IF(ICODE.NE.0)GOTO999                                        MEANCTL1.606    
c--unset the file length in the I/O routines                               GBC6F404.170    
              call set_dumpfile_length(ft_read , 0)                        GBC6F404.171    
C                                                                          MEANCTL1.607    
              CALL GET_NAME(EXPT_ID,JOB_ID,IND_IM,MEANLEV+1,INDEX_WRITE,   GRB1F305.404    
     &                      REINIT_STEPS,'s',LETTER_3,                     MEANCTL1.609    
     &                      MODEL_STATUS,TIME_CONVENTION,                  MEANCTL1.610    
     &                       0,PSNAME_WRITE,ICODE,CMESSAGE,LCAL360)        GSS1F304.469    
              IF (ICODE.GT.0) GOTO 999                                     MEANCTL1.612    
c--check and reset, if necessary, the dumpfiles addresses                  GBC6F404.172    
              call set_dumpfile_address(                                   GBC6F404.173    
     &         a_fixhd, len_fixhd,                                         GBC6F404.174    
     &         a_lookup, len1_lookup, a_len2_lookup,                       GBC6F404.175    
     &         number_of_data_words_in_memory,                             GBC6F404.176    
     &         number_of_data_words_on_disk,                               GBC6F404.177    
     &         disk_address)                                               GBC6F404.178    
c                                                                          GBC6F404.179    
c--pass the new file length to the I/O routines                            GBC6F404.180    
              call set_dumpfile_length(ft_write, disk_address)             GBC6F404.181    
              LEN_PSNAME=LEN(PSNAME_WRITE)                                 MEANCTL1.613    
              CALL FILE_OPEN(FT_WRITE,PSNAME_WRITE,LEN_PSNAME,1,1,ICODE)   GPB1F305.74     
              IF(ICODE.NE.0)GOTO999                                        MEANCTL1.615    
c--unset the file length in the I/O routines                               GBC6F404.182    
              call set_dumpfile_length(ft_write, 0)                        GBC6F404.183    
C                                                                          MEANCTL1.616    
      D1_ADDR_SUBMODEL_ID = SUBMODEL_FOR_SM(1)                             GSM1F403.200    
          CALL ACUMPS( A_FIXHD, LEN_FIXHD,                                 GKR1F402.80     
     &      A_INTHD, A_LEN_INTHD,                                          GKR1F402.81     
     &      A_REALHD, A_LEN_REALHD,                                        GKR1F402.82     
     &      A_LEVDEPC, A_LEN1_LEVDEPC, A_LEN2_LEVDEPC,                     GKR1F402.83     
     &      A_ROWDEPC, A_LEN1_ROWDEPC, A_LEN2_ROWDEPC,                     GKR1F402.84     
     &      A_COLDEPC, A_LEN1_COLDEPC, A_LEN2_COLDEPC,                     GKR1F402.85     
     &      A_FLDDEPC, A_LEN1_FLDDEPC, A_LEN2_FLDDEPC,                     GKR1F402.86     
     &      A_EXTCNST, A_LEN_EXTCNST,                                      GKR1F402.87     
     &      A_DUMPHIST, LEN_DUMPHIST,                                      GKR1F402.88     
     &      A_CFI1, A_LEN_CFI1,                                            GKR1F402.89     
     &      A_CFI2, A_LEN_CFI2,                                            GKR1F402.90     
     &      A_CFI3, A_LEN_CFI3,                                            GKR1F402.91     
     &      A_LOOKUP,LEN1_LOOKUP,A_LEN2_LOOKUP,                            GSM1F403.202    
     &      1,NO_OBJ_D1(D1_ADDR_SUBMODEL_ID),                              GSM1F403.203    
     &      D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID),                              GSM1F403.204    
*IF DEF,MPP                                                                GSM1F403.205    
     &      A_MPP_LOOKUP,MPP_LEN1_LOOKUP,                                  GSM1F403.206    
*ENDIF                                                                     GKR1F402.97     
     &      A_LEN_DATA,D1,D1,D1,IBUFLEN(1),                                GKR1F402.98     
     &      PS_FLAG(MEANLEV+1),FT_READ,FT_WRITE,                           GKR1F402.99     
     &      LCLIMREALYR,MEANLEV,I_MONTH,I_YEAR,                            GMG1F404.285    
*CALL ARGPPX                                                               GDG0F401.861    
     &                    ICODE,CMESSAGE)                                  GDG0F401.862    
          ENDIF                                                            @DYALLOC.2337   
*ENDIF                                                                     @DYALLOC.2338   
*IF DEF,OCEAN                                                              @DYALLOC.2339   
            IF(IND_IM.EQ.2)THEN                                            GRB1F305.405    
C                                                                          @DYALLOC.2341   
C      Open input and output partial sum files (calculated names)          @DYALLOC.2342   
C                                                                          @DYALLOC.2343   
              CALL GET_NAME(EXPT_ID,JOB_ID,IND_IM,MEANLEV+1,INDEX_READ,    GRB1F305.406    
     &                      REINIT_STEPS,'s',LETTER_3,                     @DYALLOC.2345   
     &                      MODEL_STATUS,TIME_CONVENTION,                  @DYALLOC.2346   
     &                       0,PSNAME_READ,ICODE,CMESSAGE,LCAL360)         GSS1F304.470    
              IF (ICODE.GT.0) GOTO 999                                     @DYALLOC.2348   
c--check and reset, if necessary, the dumpfiles addresses                  GBC6F404.184    
              call set_dumpfile_address(                                   GBC6F404.185    
     &         o_fixhd, len_fixhd,                                         GBC6F404.186    
     &         o_lookup, len1_lookup, o_len2_lookup,                       GBC6F404.187    
     &         number_of_data_words_in_memory,                             GBC6F404.188    
     &         number_of_data_words_on_disk,                               GBC6F404.189    
     &         disk_address)                                               GBC6F404.190    
c--pass the new file length to the I/O routines                            GBC6F404.191    
              call set_dumpfile_length(ft_read , disk_address)             GBC6F404.192    
              LEN_PSNAME=LEN(PSNAME_READ)                                  @DYALLOC.2349   
              CALL FILE_OPEN(FT_READ,PSNAME_READ,LEN_PSNAME,1,1,ICODE)     GPB1F305.58     
              IF(ICODE.NE.0)GOTO999                                        @DYALLOC.2351   
c--unset the file length in the I/O routines                               GBC6F404.193    
              call set_dumpfile_length(ft_read , 0)                        GBC6F404.194    
C                                                                          @DYALLOC.2352   
              CALL GET_NAME(EXPT_ID,JOB_ID,IND_IM,MEANLEV+1,INDEX_WRITE,   GRB1F305.407    
     &                      REINIT_STEPS,'s',LETTER_3,                     @DYALLOC.2354   
     &                      MODEL_STATUS,TIME_CONVENTION,                  @DYALLOC.2355   
     &                       0,PSNAME_WRITE,ICODE,CMESSAGE,LCAL360)        GSS1F304.471    
              IF (ICODE.GT.0) GOTO 999                                     @DYALLOC.2357   
c--check and reset, if necessary, the dumpfiles addresses                  GBC6F404.195    
              call set_dumpfile_address(                                   GBC6F404.196    
     &         o_fixhd, len_fixhd,                                         GBC6F404.197    
     &         o_lookup, len1_lookup, o_len2_lookup,                       GBC6F404.198    
     &         number_of_data_words_in_memory,                             GBC6F404.199    
     &         number_of_data_words_on_disk,                               GBC6F404.200    
     &         disk_address)                                               GBC6F404.201    
c                                                                          GBC6F404.202    
c--pass the new file length to the I/O routines                            GBC6F404.203    
              call set_dumpfile_length(ft_write, disk_address)             GBC6F404.204    
              LEN_PSNAME=LEN(PSNAME_WRITE)                                 @DYALLOC.2358   
              CALL FILE_OPEN(FT_WRITE,PSNAME_WRITE,LEN_PSNAME,1,1,ICODE)   GPB1F305.73     
              IF(ICODE.NE.0)GOTO999                                        @DYALLOC.2360   
c--unset the file length in the I/O routines                               GBC6F404.205    
              call set_dumpfile_length(ft_write, 0)                        GBC6F404.206    
C                                                                          @DYALLOC.2361   
      D1_ADDR_SUBMODEL_ID = SUBMODEL_FOR_SM(2)                             GSM1F403.207    
          CALL ACUMPS( O_FIXHD, LEN_FIXHD,                                 GKR1F402.100    
     &      O_INTHD, O_LEN_INTHD,                                          GKR1F402.101    
     &      O_REALHD, O_LEN_REALHD,                                        GKR1F402.102    
     &      O_LEVDEPC, O_LEN1_LEVDEPC, O_LEN2_LEVDEPC,                     GKR1F402.103    
     &      O_ROWDEPC, O_LEN1_ROWDEPC, O_LEN2_ROWDEPC,                     GKR1F402.104    
     &      O_COLDEPC, O_LEN1_COLDEPC, O_LEN2_COLDEPC,                     GKR1F402.105    
     &      O_FLDDEPC, O_LEN1_FLDDEPC, O_LEN2_FLDDEPC,                     GKR1F402.106    
     &      O_EXTCNST, O_LEN_EXTCNST,                                      GKR1F402.107    
     &      O_DUMPHIST, LEN_DUMPHIST,                                      GKR1F402.108    
     &      O_CFI1, O_LEN_CFI1,                                            GKR1F402.109    
     &      O_CFI2, O_LEN_CFI2,                                            GKR1F402.110    
     &      O_CFI3, O_LEN_CFI3,                                            GKR1F402.111    
     &      O_LOOKUP,LEN1_LOOKUP,O_LEN2_LOOKUP,                            GSM1F403.208    
     &      2,NO_OBJ_D1(D1_ADDR_SUBMODEL_ID),                              GSM1F403.209    
     &      D1_ADDR(1,1,D1_ADDR_SUBMODEL_ID),                              GSM1F403.210    
*IF DEF,MPP                                                                GSM1F403.211    
     &      O_MPP_LOOKUP,MPP_LEN1_LOOKUP,                                  GSM1F403.212    
*ENDIF                                                                     GKR1F402.117    
     &      O_LEN_DATA,D1,D1,D1,IBUFLEN(2),                                GKR1F402.118    
     &      PS_FLAG(MEANLEV+1),FT_READ,FT_WRITE,                           GKR1F402.119    
     &      LCLIMREALYR,MEANLEV,I_MONTH,I_YEAR,                            GMG1F404.286    
*CALL ARGPPX                                                               GDG0F401.867    
     &                    ICODE,CMESSAGE)                                  GDG0F401.868    
            ENDIF                                                          MEANCTL1.622    
*ENDIF                                                                     MEANCTL1.623    
                                                                           GKR1F404.296    
!                                                                          GKR1F404.297    
!      Check return code from ACUMPS                                       GKR1F404.298    
!                                                                          GKR1F404.299    
      IF(ICODE.NE.0)THEN                                                   GJC0F405.29     
        WRITE(6,*) 'MEANCTL: RESTART AT PERIOD_',RUN_MEANCTL_RESTART       GJC0F405.30     
          GOTO 999                                                         GKR1F404.302    
        ENDIF                                                              GKR1F404.303    
                                                                           GKR1F404.304    
C                                                                          MEANCTL1.624    
C      Update RUN_MEANCTL_INDICim for period_N+1 data                      GRB1F305.408    
C                                                                          MEANCTL1.626    
            RUN_MEANCTL_INDICim(MEANLEV+1,IND_IM)=                         GRB1F305.409    
     &        3-RUN_MEANCTL_INDICim(MEANLEV+1,IND_IM)                      GRB1F305.410    
C                                                                          MEANCTL1.629    
          ENDIF                                                            MEANCTL1.630    
CL                                                                         MEANCTL1.631    
! If archiving of time-meaned dumps not required then do not create them   GSM2F404.3      
          IF (MEANARCHim(MEANLEV,IND_IM).NE.0)THEN                         GSM2F404.4      
CL                      STEP 5                                             MEANCTL1.632    
CL     Transfer period_N time-meaned data to disk                          MEANCTL1.633    
CL                                                                         MEANCTL1.634    
CL     Set up appropriate header for time-mean dump                        MEANCTL1.635    
CL                                                                         MEANCTL1.636    
*IF DEF,ATMOS                                                              MEANCTL1.637    
          IF (IND_IM.EQ.1) THEN                                            GRB1F305.411    
            A_FIXHD(5)=2                                                   MEANCTL1.639    
          ENDIF                                                            MEANCTL1.640    
*ENDIF                                                                     MEANCTL1.641    
*IF DEF,OCEAN                                                              MEANCTL1.642    
          IF (IND_IM.EQ.2) THEN                                            GRB1F305.412    
            O_FIXHD(5)=2                                                   MEANCTL1.644    
          ENDIF                                                            MEANCTL1.645    
*ENDIF                                                                     MEANCTL1.646    
          CALL DUMPCTL (                                                   @DYALLOC.2363   
*CALL ARGSIZE                                                              @DYALLOC.2364   
*CALL ARGD1                                                                @DYALLOC.2365   
*CALL ARGDUMA                                                              @DYALLOC.2366   
*CALL ARGDUMO                                                              @DYALLOC.2367   
*CALL ARGDUMW                                                              GKR1F401.230    
*CALL ARGCONA                                                              @DYALLOC.2368   
*CALL ARGPTRA                                                              @DYALLOC.2369   
*CALL ARGSTS                                                               @DYALLOC.2370   
*CALL ARGPPX                                                               GDG0F401.869    
     &          IND_IM,MEANLEV,.false.,'           ',0,                    GKR4F403.36     
     &          ICODE,CMESSAGE)                                            GKR4F403.37     
                                                                           GKR4F403.38     
C                                                                          MEANCTL1.648    
          ENDIF                                                            GSM2F404.5      
C      Check return code from DUMPCTL                                      MEANCTL1.649    
C                                                                          MEANCTL1.650    
          IF(ICODE.NE.0)THEN                                               MEANCTL1.651    
            RUN_MEANCTL_RESTART=MEANLEV                                    MEANCTL1.652    
            WRITE(6,*) 'MEANCTL: RESTART AT PERIOD_',RUN_MEANCTL_RESTART   GIE0F403.406    
        LEN_PSNAME=LEN(PSNAME_WRITE)                                       MEANCTL1.654    
            CALL SETPOS(FT_WRITE,0,ICODE)                                  GTD0F400.97     
            CALL FILE_CLOSE(FT_WRITE,PSNAME_WRITE,LEN_PSNAME,1,1,ICODE)    GTD0F400.13     
        LEN_PSNAME=LEN(PSNAME_READ)                                        MEANCTL1.657    
            CALL SETPOS(FT_READ,0,ICODE)                                   GTD0F400.98     
            CALL FILE_CLOSE(FT_READ,PSNAME_READ,LEN_PSNAME,1,0,ICODE)      GTD0F400.14     
            GOTO 999                                                       MEANCTL1.660    
          ENDIF                                                            MEANCTL1.661    
C                                                                          MEANCTL1.662    
C      Decide disposition of period_N+1 partial sum dumps                  MEANCTL1.663    
C      NB: for restartability it is NOT safe to delete period 2+ sums      MEANCTL1.664    
C                                                                          MEANCTL1.665    
          IF(MEANLEV.NE.NMEANS)THEN                                        MEANCTL1.666    
        LEN_PSNAME=LEN(PSNAME_READ)                                        MEANCTL1.667    
            CALL SETPOS(FT_READ,0,ICODE)                                   GTD0F400.99     
            CALL FILE_CLOSE(FT_READ,PSNAME_READ,LEN_PSNAME,1,0,ICODE)      GTD0F400.15     
        LEN_PSNAME=LEN(PSNAME_WRITE)                                       MEANCTL1.670    
            CALL SETPOS(FT_WRITE,0,ICODE)                                  GTD0F400.100    
            CALL FILE_CLOSE(FT_WRITE,PSNAME_WRITE,LEN_PSNAME,1,0,ICODE)    GTD0F400.16     
          ENDIF                                                            MEANCTL1.673    
C                                                                          MEANCTL1.674    
C      Decide disposition of remaining period_N partial sum dump           MEANCTL1.675    
C      NB: for restartability it is NOT safe to delete period 2 sums       MEANCTL1.676    
C                                                                          MEANCTL1.677    
          IF (MEANLEV.GE.2) THEN                                           MEANCTL1.678    
        LEN_PSNAME=LEN(PSNAME_DELETE)                                      MEANCTL1.679    
            CALL FILE_CLOSE(FT_DELETE,PSNAME_DELETE,LEN_PSNAME,1,0,        GTD0F400.17     
     &      ICODE)                                                         GTD0F400.18     
          ELSE                                                             MEANCTL1.681    
            CALL FILE_CLOSE(FT_DELETE,FT_ENVIRON(FT_DELETE),               GTD0F400.19     
     &      LEN_FT_ENVIR(FT_DELETE),0,0,ICODE)                             GSM1F403.201    
          ENDIF                                                            MEANCTL1.684    
C                                                                          MEANCTL1.685    
        ENDDO                                                              MEANCTL1.686    
CL                                                                         MEANCTL1.687    
CL                    STEP 6                                               MEANCTL1.688    
CL     Read back instantaneous dump from SSD                               MEANCTL1.689    
CL                                                                         MEANCTL1.690    
*IF DEF,ATMOS                                                              MEANCTL1.691    
        IF(IND_IM.EQ.1)THEN                                                GRB1F305.414    
          CALL TRANSIN(                                                    @DYALLOC.2372   
*CALL ARGD1                                                                @DYALLOC.2373   
     &                  A_LEN_DATA+(P_LEVELS+1)*P_FIELD,FT_SSD,IND_IM      GRR1F402.322    
     &    ,ICODE,CMESSAGE)                                                 MEANCTL1.694    
          A_FIXHD(5)=1                                                     MEANCTL1.695    
        ENDIF                                                              MEANCTL1.696    
*ENDIF                                                                     MEANCTL1.697    
*IF DEF,OCEAN                                                              MEANCTL1.698    
        IF(IND_IM.EQ.2)THEN                                                GRB1F305.415    
          CALL TRANSIN(                                                    @DYALLOC.2375   
*CALL ARGD1                                                                @DYALLOC.2376   
     &                  O_LEN_DATA,FT_SSD,IND_IM                           GRR1F402.323    
     &    ,ICODE,CMESSAGE)                                                 MEANCTL1.701    
          O_FIXHD(5)=1                                                     MEANCTL1.702    
        ENDIF                                                              MEANCTL1.703    
*ENDIF                                                                     MEANCTL1.704    
C                                                                          MEANCTL1.705    
C      Check return code from TRANSIN                                      MEANCTL1.706    
C                                                                          MEANCTL1.707    
        IF(ICODE.NE.0)THEN                                                 MEANCTL1.708    
          RUN_MEANCTL_RESTART=0                                            MEANCTL1.709    
          WRITE(6,*) 'MEANCTL: MEANS COMPLETE',BLANK,                      GIE0F403.407    
     &             '- RECOVERY OF INSTANTANEOUS DATA HAS FAILED'           MEANCTL1.711    
          GOTO 999                                                         MEANCTL1.712    
        ENDIF                                                              MEANCTL1.713    
C                                                                          MEANCTL1.714    
C       CALL SETPOS(FT_SSD,0,ICODE)                                        GTD0F400.101    
        CALL FILE_CLOSE(FT_SSD,FT_ENVIRON(FT_SSD),LEN_FT_ENVIR(FT_SSD),    GTD0F400.21     
     &  0,0,ICODE)                                                         GTD0F400.22     
C                                                                          MEANCTL1.718    
        IF (ICODE .EQ. 0) THEN                                             GKR1F404.305    
! Meaning has been successful so it is now safe to delete the restart      GKR1F404.306    
! dumps from the previous dump time.                                       GKR1F404.307    
*IF DEF,ATMOS                                                              GIE0F405.48     
*IF DEF,OCEAN                                                              GIE0F405.49     
      im=ocean_im                                                          GIE0F405.50     
*ENDIF Ocean                                                               GIE0F405.51     
*IF DEF,SLAB                                                               GIE0F405.52     
      im= slab_im                                                          GIE0F405.53     
*ENDIF Slab                                                                GIE0F405.54     
*IF DEF,OCEAN,OR,DEF,SLAB                                                  GIE0F405.55     
                                                                           GIE0F405.56     
! Check if ocean/slab has completed the same number of groups as atmos     GIE0F405.57     
      IF( (STEPim(atmos_im)/GROUPim(atmos_im) ).EQ.                        GIE0F405.58     
     *    (STEPim(      im)/GROUPim(      im) ) ) THEN                     GIE0F405.59     
        internal_model=atmos_im                                            GIE0F405.60     
      ELSE                                                                 GIE0F405.61     
        internal_model=      im    ! either slab or ocean                  GIE0F405.62     
      ENDIF                                                                GIE0F405.63     
*ELSE Not OCEAN or SLAB                                                    GIE0F405.64     
      internal_model=atmos_im                                              GIE0F405.65     
*ENDIF on OCEAN or SLAB                                                    GIE0F405.66     
                                                                           GIE0F405.67     
*ELSE Not ATMOS                                                            GIE0F405.68     
*IF DEF,OCEAN                                                              GIE0F405.69     
      internal_model=ocean_im                                              GIE0F405.70     
*ELSE                                                                      GIE0F405.71     
*IF DEF,WAVE                                                               GIE0F405.72     
!  This construct is only valid while the wave sub-model in not coupled    GIE0F405.73     
!   to any other sub-model.                                                GIE0F405.74     
      internal_model=wave_im                                               GIE0F405.75     
*ELSE                                                                      GIE0F405.76     
      ICODE=1                                                              GIE0F405.77     
      CMESSAGE="SETGRCTL : Illegal sub-model type, not ATMOS, OCEAN or     GIE0F405.78     
     & WAVE"                                                               GIE0F405.79     
*ENDIF on WAVE                                                             GIE0F405.80     
*ENDIF on OCEAN                                                            GIE0F405.81     
*ENDIF on ATMOS                                                            GIE0F405.82     
*IF DEF,MPP                                                                GKR1F404.308    
          IF (mype.eq.0) THEN                                              GKR1F404.309    
*ENDIF                                                                     GKR1F404.310    
                                                                           GKR1F404.311    
            IF (IND_IM .EQ. A_IM) THEN                                     GKR1F404.312    
                                                                           GKR1F404.313    
              IF ((internal_model .EQ. atmos_im).OR.                       GIE0F405.83     
     &             (internal_model .EQ. slab_im))  THEN                    GIE0F405.84     
                IF (LASTDMPim(A_IM).NE."              ") THEN              GKR1F404.315    
                  WRITE(8,890) LASTDMPim(A_IM)                             GKR1F404.316    
                  CLOSE(8)                                                 GKR1F404.317    
                ENDIF                                                      GKR1F404.318    
                OPEN(8,FILE=FILENAME)                                      GKR1F404.319    
              ENDIF                                                        GKR1F404.320    
                                                                           GKR1F404.321    
                                                                           GKR1F404.322    
            ELSEIF (IND_IM .EQ. O_IM) THEN                                 GKR1F404.323    
                                                                           GKR1F404.324    
              IF (LASTDMPim(O_IM).NE."              ") THEN                GKR1F404.325    
                WRITE(8,890) LASTDMPim(O_IM)                               GKR1F404.326    
                CLOSE(8)                                                   GKR1F404.327    
              ENDIF                                                        GKR1F404.328    
              OPEN(8,FILE=FILENAME)                                        GKR1F404.329    
                                                                           GKR1F404.330    
              IF (internal_model .EQ. atmos_im)  THEN                      GIE0F405.85     
                                                                           GIE0F405.86     
                                                                           GIE0F405.87     
!               There is > 1 internal model ie. coupled then delete the    GKR1F404.332    
!               last atmos dump too (should put stronger test here)        GKR1F404.333    
                IF (LASTDMPim(A_IM).NE."              ") THEN              GKR1F404.334    
                  WRITE(8,890) LASTDMPim(A_IM)                             GKR1F404.335    
                  CLOSE(8)                                                 GKR1F404.336    
                ENDIF                                                      GKR1F404.337    
                OPEN(8,FILE=FILENAME)                                      GKR1F404.338    
              ENDIF                                                        GKR1F404.339    
                                                                           GKR1F404.340    
                                                                           GKR1F404.341    
            ELSEIF (IND_IM .EQ. W_IM) THEN                                 GKR1F404.342    
                                                                           GKR1F404.343    
              IF (LASTDMPim(W_IM).NE."              ") THEN                GKR1F404.344    
                WRITE(8,890) LASTDMPim(W_IM)                               GKR1F404.345    
                CLOSE(8)                                                   GKR1F404.346    
              ENDIF                                                        GKR1F404.347    
              OPEN(8,FILE=FILENAME)                                        GKR1F404.348    
                                                                           GKR1F404.349    
            ENDIF                                                          GKR1F404.350    
                                                                           GKR1F404.351    
*IF DEF,MPP                                                                GKR1F404.352    
          ENDIF ! (mype.eq.0)                                              GKR1F404.353    
*ENDIF                                                                     GKR1F404.354    
                                                                           GKR1F404.355    
 890      FORMAT('%%% ',A14,' DELETE')                                     GKR1F404.356    
                                                                           GKR1F404.357    
        ENDIF                                                              GKR1F404.358    
      ENDIF                                                                MEANCTL1.719    
CL                                                                         MEANCTL1.720    
CL**********************************************************************   MEANCTL1.721    
CL     End of means processing and updating of subsequent                  MEANCTL1.722    
CL     partial sum dumps                                                   MEANCTL1.723    
CL**********************************************************************   MEANCTL1.724    
CL                                                                         MEANCTL1.725    
C      Reset RUN_MEANCTL_RESTART to zero                                   MEANCTL1.726    
C                                                                          MEANCTL1.727    
      RUN_MEANCTL_RESTART=0                                                MEANCTL1.728    
C                                                                          MEANCTL1.729    
 999  CONTINUE                                                             MEANCTL1.730    
C                                                                          MEANCTL1.731    
C      Reset MEANLEV to zero                                               MEANCTL1.732    
C                                                                          MEANCTL1.733    
      MEANLEV=0                                                            MEANCTL1.734    
      RETURN                                                               MEANCTL1.735    
      END                                                                  MEANCTL1.736    
*ENDIF                                                                     MEANCTL1.737