*IF DEF,PICK                                                               URB0F401.1      
C ******************************COPYRIGHT******************************    GTS2F400.12151  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.12152  
C                                                                          GTS2F400.12153  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.12154  
C restrictions as set forth in the contract.                               GTS2F400.12155  
C                                                                          GTS2F400.12156  
C                Meteorological Office                                     GTS2F400.12157  
C                London Road                                               GTS2F400.12158  
C                BRACKNELL                                                 GTS2F400.12159  
C                Berkshire UK                                              GTS2F400.12160  
C                RG12 2SZ                                                  GTS2F400.12161  
C                                                                          GTS2F400.12162  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.12163  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.12164  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.12165  
C Modelling at the above address.                                          GTS2F400.12166  
C ******************************COPYRIGHT******************************    GTS2F400.12167  
C                                                                          GTS2F400.12168  
CLL  Routine: WRITHIST                                                     WRITHIS1.3      
CLL                                                                        WRITHIS1.4      
CLL  Purpose: To prepend the contents of History common blocks to          GRB1F305.714    
CLL           the beginning of the history file input.                     GRB1F305.715    
CLL                                                                        WRITHIS1.7      
CLL  Tested under compiler:   cft77                                        WRITHIS1.8      
CLL  Tested under OS version: UNICOS 5.0                                   WRITHIS1.9      
CLL                                                                        WRITHIS1.10     
CLL  Author:   A.Sangster                                                  WRITHIS1.11     
CLL                                                                        WRITHIS1.12     
CLL  Model            Modification history from model version 3.0:         WRITHIS1.13     
CLL version  date                                                          WRITHIS1.14     
CLL                                                                        AD050293.143    
CLL   3.1  05/02/93    Portable Fortran unit no assigns                    AD050293.144    
CLL                    Author: A. Dickinson    Reviewer: R. Stratton       AD050293.145    
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.216    
CLL                   portability.  Author Tracey Smith.                   TS150793.217    
CLL  3.5  06/04/95  Sub-Models stage 1: revise History and Control file    GRB1F305.716    
CLL                 contents.  RTHBarnes.                                  GRB1F305.717    
CLL  4.0  18/10/95  Add ICODE error return to GET_FILE call. RTHBarnes     GRB2F400.1      
CLL  4.1  01/05/96  Correct *IF DEF - remove CONTROL & COMB. RTHBarnes     URB0F401.2      
!LL  4.5  05/06/98  Add DELIM='APOSTROPHE' to OPEN statement so that       GRB1F405.63     
!LL                 History file is written in correct form from           GRB1F405.64     
!LL                 Fujitsu.                       RBarnes@ecmwf.int       GRB1F405.65     
CLL                                                                        WRITHIS1.15     
CLL  Programming standard: UM Doc Paper 3, draft version 3 (15/1/90)       WRITHIS1.16     
CLL                                                                        WRITHIS1.17     
CLL  Logical components covered: H4                                        WRITHIS1.18     
CLL                                                                        WRITHIS1.19     
CLL  Project task: H                                                       WRITHIS1.20     
CLL                                                                        WRITHIS1.21     
CLL  Documentation:  Unified Model Documentation Paper                     WRITHIS1.22     
CLL                  H- History Bricks                                     WRITHIS1.23     
CLL                                                                        WRITHIS1.25     
C                                                                          WRITHIS1.26     
C*L  Interface and arguments:                                              WRITHIS1.27     
C                                                                          WRITHIS1.28     

      SUBROUTINE WRITHIST                                                   1,2WRITHIS1.29     
     *         ( UNITHIST,UNITCOPY,ICODE,CMESSAGE )                        GRB1F305.718    
C                                                                          WRITHIS1.31     
      IMPLICIT NONE                                                        WRITHIS1.32     
C                                                                          WRITHIS1.33     
      INTEGER   UNITHIST  ! In  - History file unit                        GRB1F305.719    
      INTEGER   UNITCOPY  ! In  - unit no. for copy of old history file    GRB1F305.720    
      INTEGER       ICODE    ! Out - Return code from routine              WRITHIS1.35     
      CHARACTER*80  CMESSAGE ! Out - Return message if failure occured     GRB1F305.721    
C*                                                                         WRITHIS1.37     
C                                                                          WRITHIS1.38     
CL Common blocks                                                           WRITHIS1.39     
C                                                                          WRITHIS1.40     
*CALL CSUBMODL                                                             GRB1F305.722    
*CALL CHSUNITS                                                             GRB1F305.723    
*CALL CHISTORY                                                             WRITHIS1.41     
C                                                                          WRITHIS1.42     
      CHARACTER*80 FILENAME                                                GRB1F305.724    
      CHARACTER*8  NLNAME                                                  GRB1F305.725    
C*L EXTERNAL subroutines called                                            WRITHIS1.43     
      EXTERNAL GET_FILE                                                    AD050293.147    
C*                                                                         WRITHIS1.45     
CL                                                                         WRITHIS1.46     
CL 1. Open history file and rewind                                         GRB1F305.726    
CL                                                                         WRITHIS1.48     
      CALL GET_FILE(UNITHIST,FILENAME,80,ICODE)                            GTD0F400.170    
*IF -DEF,FUJITSU                                                           GRB1F405.66     
      OPEN(UNITHIST,FILE=FILENAME,FORM='FORMATTED',IOSTAT=ICODE,           PXNAMLST.22     
     & DELIM='APOSTROPHE')                                                 PXNAMLST.23     
*ELSE                                                                      GRB1F405.67     
       OPEN(UNITHIST,FILE=FILENAME,FORM='FORMATTED',                       GRB1F405.68     
     &  DELIM='APOSTROPHE',IOSTAT=ICODE)                                   GRB1F405.69     
*ENDIF                                                                     GRB1F405.70     
C                                                                          WRITHIS1.51     
C Check for error                                                          WRITHIS1.52     
C                                                                          WRITHIS1.53     
      IF(ICODE .GT.0)THEN                                                  WRITHIS1.54     
        CMESSAGE='WRITHIST: Failed in OPEN of permanent history file'      WRITHIS1.55     
        GOTO 999                                                           WRITHIS1.56     
      ELSEIF(ICODE .LT. 0)THEN                                             WRITHIS1.57     
      WRITE(6,*)'WRITHIST: Warning message on OPEN of permanent history    GIE0F403.689    
     * file'                                                               WRITHIS1.59     
        WRITE(6,*)'IOSTAT= ',ICODE                                         GIE0F403.690    
      ENDIF                                                                WRITHIS1.61     
C                                                                          WRITHIS1.62     
      REWIND(UNITHIST)                                                     WRITHIS1.63     
CL                                                                         GRB1F305.728    
CL 2. Write new record as first record of history file                     GRB1F305.729    
CL                                                                         GRB1F305.730    
      NLNAME = 'NLIHISTO'                                                  GRB1F305.731    
      WRITE(UNITHIST,NLIHISTO,ERR=200)                                     GRB1F305.732    
      NLNAME = 'NLCHISTO'                                                  GRB1F305.733    
      WRITE(UNITHIST,NLCHISTO,ERR=200)                                     GRB1F305.734    
      NLNAME = 'NLIHISTG'                                                  GRB1F305.735    
      WRITE(UNITHIST,NLIHISTG,ERR=200)                                     GRB1F305.736    
      NLNAME = 'NLCHISTG'                                                  GRB1F305.737    
      WRITE(UNITHIST,NLCHISTG,ERR=200)                                     GRB1F305.738    
      NLNAME = 'NLCFILES'                                                  GRB1F305.739    
      WRITE(UNITHIST,NLCFILES,ERR=200)                                     GRB1F305.740    
      go to 199                                                            GRB1F305.741    
C                                                                          GRB1F305.742    
C Check for error                                                          GRB1F305.743    
C                                                                          GRB1F305.744    
! Write error                                                              GRB1F305.745    
  200 continue                                                             GRB1F305.746    
      ICODE = 2                                                            GRB1F305.747    
      CMESSAGE='WRITHIST: Write ERROR on history file for namelist'//      GRB1F305.748    
     & NLNAME                                                              GRB1F305.749    
      go to 999                                                            GRB1F305.750    
  199 continue                                                             GRB1F305.751    
CL                                                                         GRB1F305.752    
CL 2. Open copy of old history file and rewind                             GRB1F305.753    
CL                                                                         GRB1F305.754    
      CALL GET_FILE(UNITCOPY,FILENAME,80,ICODE)                            GRB2F400.2      
*IF -DEF,FUJITSU                                                           GRB1F405.71     
      OPEN(UNITCOPY,FILE=FILENAME,FORM='FORMATTED',IOSTAT=ICODE,           PXNAMLST.24     
     & DELIM='APOSTROPHE')                                                 PXNAMLST.25     
*ELSE                                                                      GRB1F405.72     
       OPEN(UNITCOPY,FILE=FILENAME,FORM='FORMATTED',                       GRB1F405.73     
     &  DELIM='APOSTROPHE',IOSTAT=ICODE)                                   GRB1F405.74     
*ENDIF                                                                     GRB1F405.75     
C                                                                          WRITHIS1.65     
C Check for error                                                          WRITHIS1.66     
C                                                                          WRITHIS1.67     
      IF(ICODE .GT.0)THEN                                                  WRITHIS1.68     
        CMESSAGE='WRITHIST: Failed in OPEN of copy of old history file'    GRB1F305.757    
        GOTO 999                                                           WRITHIS1.70     
      ELSEIF(ICODE .LT. 0)THEN                                             WRITHIS1.71     
      WRITE(6,*)'WRITHIST:Warning message on OPEN of copy of old history   GIE0F403.691    
     *y file'                                                              GRB1F305.759    
        WRITE(6,*)'IOSTAT= ',ICODE                                         GIE0F403.692    
      ENDIF                                                                WRITHIS1.75     
C                                                                          WRITHIS1.76     
      REWIND(UNITCOPY)                                                     GRB1F305.760    
CL                                                                         WRITHIS1.79     
CL 3. Read each record of old and write to new permanent history file      GRB1F305.761    
CL                                                                         WRITHIS1.81     
  250 continue                                                             GRB1F305.762    
      NLNAME = 'NLIHISTO'                                                  GRB1F305.763    
      READ (UNITCOPY,NLIHISTO,END=100,ERR=300)                             GRB1F305.764    
      WRITE(UNITHIST,NLIHISTO,ERR=400)                                     GRB1F305.765    
      NLNAME = 'NLCHISTO'                                                  GRB1F305.766    
      READ (UNITCOPY,NLCHISTO,END=100,ERR=300)                             GRB1F305.767    
      WRITE(UNITHIST,NLCHISTO,ERR=400)                                     GRB1F305.768    
      NLNAME = 'NLIHISTG'                                                  GRB1F305.769    
      READ (UNITCOPY,NLIHISTG,END=100,ERR=300)                             GRB1F305.770    
      WRITE(UNITHIST,NLIHISTG,ERR=400)                                     GRB1F305.771    
      NLNAME = 'NLCHISTG'                                                  GRB1F305.772    
      READ (UNITCOPY,NLCHISTG,END=100,ERR=300)                             GRB1F305.773    
      WRITE(UNITHIST,NLCHISTG,ERR=400)                                     GRB1F305.774    
      NLNAME = 'NLCFILES'                                                  GRB1F305.775    
      READ (UNITCOPY,NLCFILES,END=100,ERR=300)                             GRB1F305.776    
      WRITE(UNITHIST,NLCFILES,ERR=400)                                     GRB1F305.777    
      go to 250                                                            GRB1F305.778    
C                                                                          WRITHIS1.87     
C Check for error                                                          WRITHIS1.88     
C                                                                          WRITHIS1.89     
! End-of-file                                                              GRB1F305.779    
  100 continue                                                             GRB1F305.780    
      IF (NLNAME .eq. 'NLIHISTO')  THEN   ! expected end-of-file           URB0F401.3      
      WRITE(6,*)'Copied old history records to new phist file completed'   GIE0F403.693    
      go to 999                                                            GRB1F305.786    
      ELSE   ! unexpected end-of-file                                      URB0F401.4      
      ICODE = 1                                                            GRB1F305.788    
      CMESSAGE='WRITHIST: End of file in READ from history file for name   GRB1F305.789    
     &list '//NLNAME                                                       GRB1F305.790    
      go to 999                                                            GRB1F305.791    
      END IF                                                               GRB1F305.792    
! Read error                                                               GRB1F305.793    
  300 continue                                                             GRB1F305.794    
      ICODE = 3                                                            GRB1F305.795    
      CMESSAGE='WRITHIST: Read ERROR on history file for namelist'//       GRB1F305.796    
     & NLNAME                                                              GRB1F305.797    
      go to 999                                                            GRB1F305.798    
! Write error                                                              GRB1F305.799    
  400 continue                                                             GRB1F305.800    
      ICODE = 4                                                            GRB1F305.801    
      CMESSAGE='WRITHIST: Write ERROR on history file for namelist'//      GRB1F305.802    
     & NLNAME                                                              GRB1F305.803    
C                                                                          WRITHIS1.99     
 999  CONTINUE                                                             WRITHIS1.100    
CL                                                                         WRITHIS1.101    
CL 3. Close and return                                                     WRITHIS1.102    
CL                                                                         WRITHIS1.103    
      CLOSE(UNITHIST)                                                      WRITHIS1.104    
      RETURN                                                               WRITHIS1.105    
      END                                                                  WRITHIS1.106    
*ENDIF                                                                     WRITHIS1.107