*IF DEF,C80_1A,OR,DEF,UTILIO                                               UIE3F404.69     
C ******************************COPYRIGHT******************************    GTS2F400.12133  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.12134  
C                                                                          GTS2F400.12135  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.12136  
C restrictions as set forth in the contract.                               GTS2F400.12137  
C                                                                          GTS2F400.12138  
C                Meteorological Office                                     GTS2F400.12139  
C                London Road                                               GTS2F400.12140  
C                BRACKNELL                                                 GTS2F400.12141  
C                Berkshire UK                                              GTS2F400.12142  
C                RG12 2SZ                                                  GTS2F400.12143  
C                                                                          GTS2F400.12144  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.12145  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.12146  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.12147  
C Modelling at the above address.                                          GTS2F400.12148  
C ******************************COPYRIGHT******************************    GTS2F400.12149  
C                                                                          GTS2F400.12150  
CLL  SUBROUTINE WRITHEAD---------------------------------------            WRITHE1A.3      
CLL                                                                        WRITHE1A.4      
CLL  Purpose: Writes out model dump header records on unit NFTOUT &        WRITHE1A.5      
CLL           checks model and dump dimensions for consistency.            WRITHE1A.6      
CLL           32-bit IEEE output option supported                          WRITHE1A.7      
CLL           64-bit IEEE output option supported                          WRITHE1A.8      
CLL                                                                        WRITHE1A.9      
CLL  Written by A. Dickinson 31/01/90                                      WRITHE1A.10     
CLL                                                                        WRITHE1A.11     
CLL  Model            Modification history from model version 3.0:         WRITHE1A.12     
CLL version  date                                                          WRITHE1A.13     
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.213    
CLL                   portability.  Author Tracey Smith.                   TS150793.214    
CLL   3.5    28/03/95 MPP code: New code for parallel I/O                  GPB0F305.425    
CLL                                              P.Burton                  GPB0F305.426    
!     4.1    18/06/96 Changes to cope with changes in STASH addressing     GDG0F401.1638   
!                     Author D.M. Goddard.                                 GDG0F401.1639   
!    4.1  21/05/96  Correct conversion of LOOKUP(65-128) in obs            UDR1F401.1      
!                   files for IEEE/64 bits. D Robinson                     UDR1F401.2      
!     4.4    17/07/97 Introduce conversion from ieee to Cray PVP           UDG2F404.97     
!                     numbers and reintroduce functionality for            UDG2F404.98     
!                     PVP machines                                         UDG2F404.99     
!                     Author: D.M. Goddard                                 UDG2F404.100    
!     4.5    25/08/98 Correct conversion of LOOKUP(65-128) for             UDG1F405.1288   
!                     cx files and OPS obstores.                           UDG1F405.1289   
!                     Author D.M. Goddard                                  UDG1F405.1290   
CLL                                                                        WRITHE1A.14     
CLL  Programming standard:                                                 WRITHE1A.15     
CLL           Unified Model Documentation Paper No 3                       WRITHE1A.16     
CLL           Version No 1 15/1/90                                         WRITHE1A.17     
CLL                                                                        WRITHE1A.18     
CLL  System component: W30                                                 WRITHE1A.19     
CLL                                                                        WRITHE1A.20     
CLL  System task: F3                                                       WRITHE1A.21     
CLL                                                                        WRITHE1A.22     
CLL  Documentation:                                                        WRITHE1A.23     
CLL           Unified Model Documentation Paper No F3                      WRITHE1A.24     
CLL           Version No 5 9/2/90                                          WRITHE1A.25     
CLL                                                                        WRITHE1A.26     
CLL------------------------------------------------------------            WRITHE1A.27     
C*L Arguments:-------------------------------------------------            WRITHE1A.28     

      SUBROUTINE WRITHEAD(NFTOUT,FIXHD,LEN_FIXHD,       ! Intent (In)       10,56GDG0F401.1640   
     &                    INTHD,LEN_INTHD,                                 GDG0F401.1641   
     &                    REALHD,LEN_REALHD,                               GDG0F401.1642   
     &                    LEVDEPC,LEN1_LEVDEPC,LEN2_LEVDEPC,               GDG0F401.1643   
     &                    ROWDEPC,LEN1_ROWDEPC,LEN2_ROWDEPC,               GDG0F401.1644   
     &                    COLDEPC,LEN1_COLDEPC,LEN2_COLDEPC,               GDG0F401.1645   
     &                    FLDDEPC,LEN1_FLDDEPC,LEN2_FLDDEPC,               GDG0F401.1646   
     &                    EXTCNST,LEN_EXTCNST,                             GDG0F401.1647   
     &                    DUMPHIST,LEN_DUMPHIST,                           GDG0F401.1648   
     &                    CFI1,LEN_CFI1,                                   GDG0F401.1649   
     &                    CFI2,LEN_CFI2,                                   GDG0F401.1650   
     &                    CFI3,LEN_CFI3,                                   GDG0F401.1651   
     &                    LOOKUP,LEN1_LOOKUP,LEN2_LOOKUP,LEN_DATA,         GDG0F401.1652   
*IF DEF,IEEE                                                               GDG0F401.1653   
     &                    IEEE_TYPE,                                       GDG0F401.1654   
     &                    LPVP,                                            UDG2F404.101    
*ENDIF                                                                     GDG0F401.1655   
*CALL ARGPPX                                                               GDG0F401.1656   
     &                    START_BLOCK,ICODE,CMESSAGE)   ! Intent (Out)     GDG0F401.1657   
                                                                           WRITHE1A.49     
      IMPLICIT NONE                                                        WRITHE1A.50     
                                                                           WRITHE1A.51     
      INTEGER                                                              WRITHE1A.52     
     * NFTOUT        !IN Unit no of dump                                   WRITHE1A.53     
     *,LEN_FIXHD     !IN Length of fixed length header                     WRITHE1A.54     
     *,LEN_INTHD     !IN Length of integer header                          WRITHE1A.55     
     *,LEN_REALHD    !IN Length of real header                             WRITHE1A.56     
     *,LEN1_LEVDEPC  !IN 1st dim of level dep consts                       WRITHE1A.57     
     *,LEN2_LEVDEPC  !IN 2ndt dim of level dep consts                      WRITHE1A.58     
     *,LEN1_ROWDEPC  !IN 1st dim of row dep consts                         WRITHE1A.59     
     *,LEN2_ROWDEPC  !IN 2nd dim of row dep consts                         WRITHE1A.60     
     &,LEN1_COLDEPC  !IN 1st dim of column dep consts                      WRITHE1A.61     
     &,LEN2_COLDEPC  !IN 2nd dim of column dep consts                      WRITHE1A.62     
     &,LEN1_FLDDEPC  !IN 1st dim of field dep consts                       WRITHE1A.63     
     &,LEN2_FLDDEPC  !IN 2nd dim of field dep consts                       WRITHE1A.64     
     &,LEN_EXTCNST   !IN Length of extra constants                         WRITHE1A.65     
     &,LEN_DUMPHIST  !IN Length of history block                           WRITHE1A.66     
     &,LEN_CFI1      !IN Length of comp field index 1                      WRITHE1A.67     
     &,LEN_CFI2      !IN Length of comp field index 2                      WRITHE1A.68     
     &,LEN_CFI3      !IN Length of comp field index 3                      WRITHE1A.69     
     &,LEN1_LOOKUP   !IN 1st dim of lookup                                 WRITHE1A.70     
     &,LEN2_LOOKUP   !IN 2nd dim of lookup                                 WRITHE1A.71     
                                                                           WRITHE1A.72     
      INTEGER                                                              WRITHE1A.73     
     * LEN_DATA       !IN Length of model data                             WRITHE1A.74     
     *,START_BLOCK    !OUT Pointer to position of each block.              WRITHE1A.75     
     *                !Should point to start of model data block on exit   WRITHE1A.76     
     *,ICODE          !OUT Return code; successful=0                       WRITHE1A.77     
     *                !                 error > 0                          WRITHE1A.78     
*IF DEF,IEEE                                                               WRITHE1A.79     
     *,IEEE_TYPE      !IN IEEE precision                                   WRITHE1A.80     
                                                                           UDG2F404.102    
      LOGICAL LPVP    !IN True if output in PVP format                     UDG2F404.103    
*ENDIF                                                                     WRITHE1A.81     
                                                                           WRITHE1A.82     
      CHARACTER*(80)                                                       TS150793.215    
     * CMESSAGE       !OUT Error message if ICODE > 0                      WRITHE1A.84     
                                                                           WRITHE1A.85     
      INTEGER                                                              WRITHE1A.86     
     * FIXHD(LEN_FIXHD) !IN Fixed length header                            WRITHE1A.87     
     *,INTHD(LEN_INTHD) !IN Integer header                                 WRITHE1A.88     
     *,LOOKUP(LEN1_LOOKUP,LEN2_LOOKUP) !IN PP lookup tables                WRITHE1A.89     
     *,CFI1(LEN_CFI1+1) !IN Compressed field index no 1                    WRITHE1A.90     
     *,CFI2(LEN_CFI2+1) !IN Compressed field index no 2                    WRITHE1A.91     
     *,CFI3(LEN_CFI3+1) !IN Compressed field index no 3                    WRITHE1A.92     
                                                                           WRITHE1A.93     
      REAL                                                                 WRITHE1A.94     
     & REALHD(LEN_REALHD) !IN Real header                                  WRITHE1A.95     
     &,LEVDEPC(1+LEN1_LEVDEPC*LEN2_LEVDEPC) !IN Lev dep consts             WRITHE1A.96     
     &,ROWDEPC(1+LEN1_ROWDEPC*LEN2_ROWDEPC) !IN Row dep consts             WRITHE1A.97     
     &,COLDEPC(1+LEN1_COLDEPC*LEN2_COLDEPC) !IN Col dep consts             WRITHE1A.98     
     &,FLDDEPC(1+LEN1_FLDDEPC*LEN2_FLDDEPC) !IN Field dep consts           WRITHE1A.99     
     &,EXTCNST(LEN_EXTCNST+1)   !IN Extra constants                        WRITHE1A.100    
     &,DUMPHIST(LEN_DUMPHIST+1) !IN History block                          WRITHE1A.101    
                                                                           WRITHE1A.102    
                                                                           WRITHE1A.103    
C Local arrays:------------------------------------------------            WRITHE1A.104    
C None                                                                     WRITHE1A.105    
*IF DEF,IEEE                                                               WRITHE1A.106    
                                                                           WRITHE1A.107    
      INTEGER CRI2IEG,CRAY2CRI,CRI2CRAY                                    UDG2F404.104    
      EXTERNAL CRI2IEG,CRAY2CRI,CRI2CRAY                                   UDG2F404.105    
                                                                           WRITHE1A.110    
      INTEGER                                                              WRITHE1A.111    
     * FIXHD_OUT(LEN_FIXHD) ! Fixed length header                          WRITHE1A.112    
     *,INTHD_OUT(LEN_INTHD) ! Integer header                               WRITHE1A.113    
     *,LOOKUP_O32(LEN1_LOOKUP/2,LEN2_LOOKUP) !PP lookup tables (32-bit)    UTS0F400.1      
     *,LOOKUP_O64(LEN1_LOOKUP,LEN2_LOOKUP)   !PP lookup tables (64-bit)    UTS0F400.2      
     *,CFI1_OUT(LEN_CFI1+1) ! Compressed field index no 1                  WRITHE1A.116    
     *,CFI2_OUT(LEN_CFI2+1) ! Compressed field index no 2                  WRITHE1A.117    
     *,CFI3_OUT(LEN_CFI3+1) ! Compressed field index no 3                  WRITHE1A.118    
     *,I,J                                                                 WRITHE1A.119    
                                                                           WRITHE1A.120    
      REAL                                                                 WRITHE1A.121    
     & REALHD_OUT(LEN_REALHD) ! Real header                                WRITHE1A.122    
     &,LEVDEPC_OUT(1+LEN1_LEVDEPC*LEN2_LEVDEPC) ! Lev dep consts           WRITHE1A.123    
     &,ROWDEPC_OUT(1+LEN1_ROWDEPC*LEN2_ROWDEPC) ! Row dep consts           WRITHE1A.124    
     &,COLDEPC_OUT(1+LEN1_COLDEPC*LEN2_COLDEPC) ! Col dep consts           WRITHE1A.125    
     &,FLDDEPC_OUT(1+LEN1_FLDDEPC*LEN2_FLDDEPC) ! Field dep consts         WRITHE1A.126    
     &,EXTCNST_OUT(LEN_EXTCNST+1)   ! Extra constants                      WRITHE1A.127    
     &,DUMPHIST_OUT(LEN_DUMPHIST+1) ! History block                        WRITHE1A.128    
                                                                           WRITHE1A.129    
*ENDIF                                                                     WRITHE1A.130    
*IF DEF,MPP                                                                GPB0F305.427    
*CALL PARVARS                                                              GPB0F305.428    
*ENDIF                                                                     GPB0F305.429    
C -------------------------------------------------------------            WRITHE1A.131    
C External subroutines called:---------------------------------            WRITHE1A.132    
      EXTERNAL IOERROR,POSERROR,PR_FIXHD,CHK_LOOK,BUFFOUT                  WRITHE1A.133    
C*-------------------------------------------------------------            WRITHE1A.134    
C Local variables:---------------------------------------------            WRITHE1A.135    
      INTEGER LEN_IO                                                       WRITHE1A.136    
      REAL A                                                               WRITHE1A.137    
C -------------------------------------------------------------            WRITHE1A.138    
! Comdecks:----------------------------------------------------------      GDG0F401.1658   
*CALL CSUBMODL                                                             GDG0F401.1659   
*CALL CPPXREF                                                              GDG0F401.1660   
*CALL PPXLOOK                                                              GDG0F401.1661   
C -------------------------------------------------------------            GDG0F401.1662   
      ICODE=0                                                              WRITHE1A.139    
      CMESSAGE=' '                                                         WRITHE1A.140    
                                                                           WRITHE1A.141    
CL 1. Buffer out fixed length header record                                WRITHE1A.142    
                                                                           WRITHE1A.143    
*IF DEF,IEEE                                                               WRITHE1A.144    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.145    
        I= CRI2IEG(2,LEN_FIXHD,FIXHD_OUT,0,FIXHD,1,64,IEEE_TYPE)           UDG1F402.38     
        CALL BUFFO32(NFTOUT,FIXHD_OUT,LEN_FIXHD,LEN_IO,A)                  WRITHE1A.147    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.148    
        CALL BUFFOUT(NFTOUT,FIXHD(1),LEN_FIXHD,LEN_IO,A)                   WRITHE1A.149    
      ENDIF                                                                WRITHE1A.150    
*ELSE                                                                      WRITHE1A.151    
      CALL BUFFOUT(NFTOUT,FIXHD(1),LEN_FIXHD,LEN_IO,A)                     WRITHE1A.152    
*ENDIF                                                                     WRITHE1A.153    
                                                                           WRITHE1A.154    
                                                                           WRITHE1A.155    
C Check for I/O errors                                                     WRITHE1A.156    
      IF(A.NE.-1.0.OR.LEN_IO.NE.LEN_FIXHD)THEN                             WRITHE1A.157    
        CALL IOERROR('buffer out of fixed length header',A,LEN_IO          WRITHE1A.158    
     *               ,LEN_FIXHD)                                           WRITHE1A.159    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.160    
        ICODE=1                                                            WRITHE1A.161    
        RETURN                                                             WRITHE1A.162    
      ENDIF                                                                WRITHE1A.163    
                                                                           WRITHE1A.164    
      START_BLOCK=LEN_FIXHD+1                                              WRITHE1A.165    
                                                                           WRITHE1A.166    
*IF DEF,DIAG81                                                             WRITHE1A.167    
C Check validity of data and print out fixed header information            WRITHE1A.168    
                                                                           WRITHE1A.169    
      CALL PR_FIXHD(FIXHD,LEN_FIXHD,LEN_INTHD,LEN_REALHD,LEN1_LEVDEPC      WRITHE1A.170    
     *,LEN2_LEVDEPC,LEN1_ROWDEPC,LEN2_ROWDEPC,LEN1_COLDEPC,LEN2_COLDEPC    WRITHE1A.171    
     *,LEN1_FLDDEPC,LEN2_FLDDEPC,LEN_EXTCNST,LEN_DUMPHIST,LEN_CFI1         WRITHE1A.172    
     *,LEN_CFI2,LEN_CFI3,LEN1_LOOKUP,LEN2_LOOKUP,LEN_DATA                  WRITHE1A.173    
     *,ICODE,CMESSAGE)                                                     WRITHE1A.174    
                                                                           WRITHE1A.175    
      IF(ICODE.GT.0)RETURN                                                 WRITHE1A.176    
*ENDIF                                                                     WRITHE1A.177    
                                                                           WRITHE1A.178    
CL 2. Buffer out integer constants                                         WRITHE1A.179    
                                                                           WRITHE1A.180    
      IF(FIXHD(100).GT.0)THEN                                              WRITHE1A.181    
                                                                           WRITHE1A.182    
*IF DEF,DIAG81                                                             WRITHE1A.183    
C Check for error in file pointers                                         WRITHE1A.184    
       IF(FIXHD(100).NE.START_BLOCK)THEN                                   WRITHE1A.185    
        CALL POSERROR('integer constants',START_BLOCK,100,FIXHD(100))      WRITHE1A.186    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.187    
        ICODE=2                                                            WRITHE1A.188    
        RETURN                                                             WRITHE1A.189    
       ENDIF                                                               WRITHE1A.190    
*ENDIF                                                                     WRITHE1A.191    
                                                                           WRITHE1A.192    
*IF DEF,IEEE                                                               WRITHE1A.193    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.194    
        I= CRI2IEG(2,FIXHD(101),INTHD_OUT,0,INTHD,1,64,IEEE_TYPE)          UDG1F402.42     
        CALL BUFFO32(NFTOUT,INTHD_OUT,FIXHD(101),LEN_IO,A)                 WRITHE1A.196    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.197    
        CALL BUFFOUT(NFTOUT,INTHD(1),FIXHD(101),LEN_IO,A)                  WRITHE1A.198    
      ENDIF                                                                WRITHE1A.199    
*ELSE                                                                      WRITHE1A.200    
      CALL BUFFOUT(NFTOUT,INTHD(1),FIXHD(101),LEN_IO,A)                    WRITHE1A.201    
*ENDIF                                                                     WRITHE1A.202    
                                                                           WRITHE1A.203    
C Check for I/O errors                                                     WRITHE1A.204    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(101))THEN                           WRITHE1A.205    
        CALL IOERROR('buffer out of integer constants',A,LEN_IO,           WRITHE1A.206    
     *               FIXHD(101))                                           WRITHE1A.207    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.208    
        ICODE=3                                                            WRITHE1A.209    
        RETURN                                                             WRITHE1A.210    
       ENDIF                                                               WRITHE1A.211    
                                                                           WRITHE1A.212    
       START_BLOCK=START_BLOCK+FIXHD(101)                                  WRITHE1A.213    
                                                                           WRITHE1A.214    
      ENDIF                                                                WRITHE1A.215    
                                                                           WRITHE1A.216    
CL 3. Buffer out real constants                                            WRITHE1A.217    
                                                                           WRITHE1A.218    
      IF(FIXHD(105).GT.0)THEN                                              WRITHE1A.219    
                                                                           WRITHE1A.220    
*IF DEF,DIAG81                                                             WRITHE1A.221    
C Check for error in file pointers                                         WRITHE1A.222    
       IF(FIXHD(105).NE.START_BLOCK)THEN                                   WRITHE1A.223    
        CALL POSERROR('real constants',START_BLOCK,105,FIXHD(105))         WRITHE1A.224    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.225    
        ICODE=4                                                            WRITHE1A.226    
        RETURN                                                             WRITHE1A.227    
       ENDIF                                                               WRITHE1A.228    
*ENDIF                                                                     WRITHE1A.229    
                                                                           WRITHE1A.230    
C Check for I/O errors                                                     WRITHE1A.231    
*IF DEF,IEEE                                                               WRITHE1A.232    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.233    
        I= CRI2IEG(3,FIXHD(106),REALHD_OUT,0,REALHD,1,64,IEEE_TYPE)        UDG1F402.46     
        CALL BUFFO32(NFTOUT,REALHD_OUT,FIXHD(106),LEN_IO,A)                WRITHE1A.235    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.236    
        IF(LPVP)THEN                                                       UDG2F404.106    
          I= CRI2CRAY(2,FIXHD(106),REALHD_OUT,0,REALHD,1)                  UDG2F404.107    
        ELSE                                                               UDG2F404.108    
          I= CRAY2CRI(2,FIXHD(106),REALHD,0,REALHD_OUT,1)                  UDG2F404.109    
        END IF                                                             UDG2F404.110    
        CALL BUFFOUT(NFTOUT,REALHD_OUT,FIXHD(106),LEN_IO,A)                WRITHE1A.238    
      ENDIF                                                                WRITHE1A.239    
*ELSE                                                                      WRITHE1A.240    
      CALL BUFFOUT(NFTOUT,REALHD(1),FIXHD(106),LEN_IO,A)                   WRITHE1A.241    
*ENDIF                                                                     WRITHE1A.242    
                                                                           WRITHE1A.243    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(106))THEN                           WRITHE1A.244    
        CALL IOERROR('buffer out of real constants',A,LEN_IO,              WRITHE1A.245    
     *                FIXHD(106))                                          WRITHE1A.246    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.247    
        ICODE=5                                                            WRITHE1A.248    
        RETURN                                                             WRITHE1A.249    
       ENDIF                                                               WRITHE1A.250    
                                                                           WRITHE1A.251    
       START_BLOCK=START_BLOCK+FIXHD(106)                                  WRITHE1A.252    
                                                                           WRITHE1A.253    
      ENDIF                                                                WRITHE1A.254    
                                                                           WRITHE1A.255    
CL 4. Buffer out level dependent constants                                 WRITHE1A.256    
                                                                           WRITHE1A.257    
      IF(FIXHD(110).GT.0)THEN                                              WRITHE1A.258    
                                                                           WRITHE1A.259    
*IF DEF,DIAG81                                                             WRITHE1A.260    
C Check for error in file pointers                                         WRITHE1A.261    
       IF(FIXHD(110).NE.START_BLOCK)THEN                                   WRITHE1A.262    
        CALL POSERROR('level dependent constants',                         WRITHE1A.263    
     *  START_BLOCK,110,FIXHD(110))                                        WRITHE1A.264    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.265    
        ICODE=6                                                            WRITHE1A.266    
        RETURN                                                             WRITHE1A.267    
       ENDIF                                                               WRITHE1A.268    
*ENDIF                                                                     WRITHE1A.269    
                                                                           WRITHE1A.270    
*IF DEF,IEEE                                                               WRITHE1A.271    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.272    
        I= CRI2IEG(3,FIXHD(111)*FIXHD(112),LEVDEPC_OUT,0,                  UDG1F402.48     
     &             LEVDEPC,1,64,IEEE_TYPE)                                 UDG1F402.49     
        CALL BUFFO32(NFTOUT,LEVDEPC_OUT,FIXHD(111)*FIXHD(112),LEN_IO,A)    WRITHE1A.274    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.275    
        IF(LPVP)THEN                                                       UDG2F404.111    
          I= CRI2CRAY(2,FIXHD(111)*FIXHD(112),LEVDEPC_OUT,0,LEVDEPC,1)     UDG2F404.112    
        ELSE                                                               UDG2F404.113    
          I= CRAY2CRI(2,FIXHD(111)*FIXHD(112),LEVDEPC,0,LEVDEPC_OUT,1)     UDG2F404.114    
        END IF                                                             UDG2F404.115    
        CALL BUFFOUT(NFTOUT,LEVDEPC_OUT,FIXHD(111)*FIXHD(112),LEN_IO,A)    WRITHE1A.277    
      ENDIF                                                                WRITHE1A.278    
*ELSE                                                                      WRITHE1A.279    
      CALL BUFFOUT(NFTOUT,LEVDEPC(1),FIXHD(111)*FIXHD(112),LEN_IO,A)       WRITHE1A.280    
*ENDIF                                                                     WRITHE1A.281    
                                                                           WRITHE1A.282    
C Check for I/O errors                                                     WRITHE1A.283    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(111)*FIXHD(112))THEN                WRITHE1A.284    
        CALL IOERROR('buffer out of level dependent constants',A,LEN_IO,   WRITHE1A.285    
     *               FIXHD(111)*FIXHD(112))                                WRITHE1A.286    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.287    
        ICODE=7                                                            WRITHE1A.288    
        RETURN                                                             WRITHE1A.289    
       ENDIF                                                               WRITHE1A.290    
                                                                           WRITHE1A.291    
       START_BLOCK=START_BLOCK+FIXHD(111)*FIXHD(112)                       WRITHE1A.292    
                                                                           WRITHE1A.293    
*IF DEF,MPP                                                                GPB0F305.430    
      IF (mype .EQ. 0) THEN                                                GPB0F305.431    
*ENDIF                                                                     GPB0F305.432    
       WRITE(6,'('' '')')                                                  WRITHE1A.294    
       WRITE(6,'('' LEVEL DEPENDENT CONSTANTS'')')                         WRITHE1A.295    
       WRITE(6,'('' '',I8,'' 64-bit words long'')')FIXHD(111)*FIXHD(112)   WRITHE1A.296    
*IF DEF,MPP                                                                GPB0F305.433    
      ENDIF ! if mype .eq. 0                                               GPB0F305.434    
*ENDIF                                                                     GPB0F305.435    
                                                                           WRITHE1A.297    
      ENDIF                                                                WRITHE1A.298    
                                                                           WRITHE1A.299    
CL 5. Buffer out row dependent constants                                   WRITHE1A.300    
                                                                           WRITHE1A.301    
      IF(FIXHD(115).GT.0)THEN                                              WRITHE1A.302    
                                                                           WRITHE1A.303    
*IF DEF,DIAG81                                                             WRITHE1A.304    
C Check for error in file pointers                                         WRITHE1A.305    
       IF(FIXHD(115).NE.START_BLOCK)THEN                                   WRITHE1A.306    
        CALL POSERROR('row dependent constants',                           WRITHE1A.307    
     *  START_BLOCK,115,FIXHD(115))                                        WRITHE1A.308    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.309    
        ICODE=8                                                            WRITHE1A.310    
        RETURN                                                             WRITHE1A.311    
       ENDIF                                                               WRITHE1A.312    
*ENDIF                                                                     WRITHE1A.313    
                                                                           WRITHE1A.314    
*IF DEF,IEEE                                                               WRITHE1A.315    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.316    
        I= CRI2IEG(3,FIXHD(116)*FIXHD(117),ROWDEPC_OUT,0,                  UDG1F402.51     
     &             ROWDEPC,1,64,IEEE_TYPE)                                 UDG1F402.52     
        CALL BUFFO32(NFTOUT,ROWDEPC_OUT,FIXHD(116)*FIXHD(117),LEN_IO,A)    WRITHE1A.318    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.319    
        IF(LPVP)THEN                                                       UDG2F404.116    
          I= CRI2CRAY(2,FIXHD(116)*FIXHD(117),ROWDEPC_OUT,0,ROWDEPC,1)     UDG2F404.117    
        ELSE                                                               UDG2F404.118    
          I= CRAY2CRI(2,FIXHD(116)*FIXHD(117),ROWDEPC,0,ROWDEPC_OUT,1)     UDG2F404.119    
        END IF                                                             UDG2F404.120    
        CALL BUFFOUT(NFTOUT,ROWDEPC_OUT,FIXHD(116)*FIXHD(117),LEN_IO,A)    WRITHE1A.321    
      ENDIF                                                                WRITHE1A.322    
*ELSE                                                                      WRITHE1A.323    
      CALL BUFFOUT(NFTOUT,ROWDEPC(1),FIXHD(116)*FIXHD(117),LEN_IO,A)       WRITHE1A.324    
*ENDIF                                                                     WRITHE1A.325    
                                                                           WRITHE1A.326    
C Check for I/O errors                                                     WRITHE1A.327    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(116)*FIXHD(117))THEN                WRITHE1A.328    
        CALL IOERROR('buffer out of row dependent constants',A,LEN_IO,     WRITHE1A.329    
     *                FIXHD(116)*FIXHD(117))                               WRITHE1A.330    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.331    
        ICODE=9                                                            WRITHE1A.332    
        RETURN                                                             WRITHE1A.333    
      ENDIF                                                                WRITHE1A.334    
                                                                           WRITHE1A.335    
                                                                           WRITHE1A.336    
       START_BLOCK=START_BLOCK+FIXHD(116)*FIXHD(117)                       WRITHE1A.337    
                                                                           WRITHE1A.338    
*IF DEF,MPP                                                                GPB0F305.436    
      IF (mype .EQ. 0) THEN                                                GPB0F305.437    
*ENDIF                                                                     GPB0F305.438    
       WRITE(6,'('' '')')                                                  WRITHE1A.339    
       WRITE(6,'('' ROW DEPENDENT CONSTANTS'')')                           WRITHE1A.340    
       WRITE(6,'('' '',I8,'' 64-bit words long'')')FIXHD(116)*FIXHD(117)   WRITHE1A.341    
*IF DEF,MPP                                                                GPB0F305.439    
      ENDIF ! if mype .eq. 0                                               GPB0F305.440    
*ENDIF                                                                     GPB0F305.441    
                                                                           WRITHE1A.342    
      ENDIF                                                                WRITHE1A.343    
                                                                           WRITHE1A.344    
CL 6. Buffer out column dependent constants                                WRITHE1A.345    
                                                                           WRITHE1A.346    
      IF(FIXHD(120).GT.0)THEN                                              WRITHE1A.347    
                                                                           WRITHE1A.348    
*IF DEF,DIAG81                                                             WRITHE1A.349    
C Check for error in file pointers                                         WRITHE1A.350    
       IF(FIXHD(120).NE.START_BLOCK)THEN                                   WRITHE1A.351    
        CALL POSERROR('column dependent constants',                        WRITHE1A.352    
     *  START_BLOCK,120,FIXHD(120))                                        WRITHE1A.353    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.354    
        ICODE=10                                                           WRITHE1A.355    
        RETURN                                                             WRITHE1A.356    
       ENDIF                                                               WRITHE1A.357    
*ENDIF                                                                     WRITHE1A.358    
                                                                           WRITHE1A.359    
*IF DEF,IEEE                                                               WRITHE1A.360    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.361    
        I= CRI2IEG(3,FIXHD(121)*FIXHD(122),COLDEPC_OUT,0,                  UDG1F402.54     
     &             COLDEPC,1,64,IEEE_TYPE)                                 UDG1F402.55     
        CALL BUFFO32(NFTOUT,COLDEPC_OUT,FIXHD(121)*FIXHD(122),LEN_IO,A)    WRITHE1A.363    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.364    
        IF(LPVP)THEN                                                       UDG2F404.121    
          I= CRI2CRAY(2,FIXHD(121)*FIXHD(122),COLDEPC_OUT,0,COLDEPC,1)     UDG2F404.122    
        ELSE                                                               UDG2F404.123    
          I= CRAY2CRI(2,FIXHD(121)*FIXHD(122),COLDEPC,0,COLDEPC_OUT,1)     UDG2F404.124    
        END IF                                                             UDG2F404.125    
        CALL BUFFOUT(NFTOUT,COLDEPC_OUT,FIXHD(121)*FIXHD(122),LEN_IO,A)    WRITHE1A.366    
      ENDIF                                                                WRITHE1A.367    
*ELSE                                                                      WRITHE1A.368    
      CALL BUFFOUT(NFTOUT,COLDEPC(1),FIXHD(121)*FIXHD(122),LEN_IO,A)       WRITHE1A.369    
*ENDIF                                                                     WRITHE1A.370    
                                                                           WRITHE1A.371    
C Check for I/O errors                                                     WRITHE1A.372    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(121)*FIXHD(122))THEN                WRITHE1A.373    
        CALL IOERROR('buffer out of column dependent constants',A,LEN_IO   WRITHE1A.374    
     *              ,FIXHD(121)*FIXHD(122))                                WRITHE1A.375    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.376    
        ICODE=11                                                           WRITHE1A.377    
        RETURN                                                             WRITHE1A.378    
       ENDIF                                                               WRITHE1A.379    
                                                                           WRITHE1A.380    
       START_BLOCK=START_BLOCK+FIXHD(121)*FIXHD(122)                       WRITHE1A.381    
                                                                           WRITHE1A.382    
*IF DEF,MPP                                                                GPB0F305.442    
      IF (mype .EQ. 0) THEN                                                GPB0F305.443    
*ENDIF                                                                     GPB0F305.444    
       WRITE(6,'('' '')')                                                  WRITHE1A.383    
       WRITE(6,'('' COLUMN DEPENDENT CONSTANTS'')')                        WRITHE1A.384    
       WRITE(6,'('' '',I8,'' 64-bit words long'')')FIXHD(121)*FIXHD(122)   WRITHE1A.385    
*IF DEF,MPP                                                                GPB0F305.445    
      ENDIF ! if mype .eq. 0                                               GPB0F305.446    
*ENDIF                                                                     GPB0F305.447    
                                                                           WRITHE1A.386    
      ENDIF                                                                WRITHE1A.387    
                                                                           WRITHE1A.388    
CL 7. Buffer out constants stored as fields                                WRITHE1A.389    
                                                                           WRITHE1A.390    
      IF(FIXHD(125).GT.0)THEN                                              WRITHE1A.391    
                                                                           WRITHE1A.392    
*IF DEF,DIAG81                                                             WRITHE1A.393    
C Check for error in file pointers                                         WRITHE1A.394    
       IF(FIXHD(125).NE.START_BLOCK)THEN                                   WRITHE1A.395    
        CALL POSERROR('fields of constants',                               WRITHE1A.396    
     *  START_BLOCK,125,FIXHD(125))                                        WRITHE1A.397    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.398    
        ICODE=12                                                           WRITHE1A.399    
        RETURN                                                             WRITHE1A.400    
       ENDIF                                                               WRITHE1A.401    
*ENDIF                                                                     WRITHE1A.402    
                                                                           WRITHE1A.403    
*IF DEF,IEEE                                                               WRITHE1A.404    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.405    
        I= CRI2IEG(3,FIXHD(126)*FIXHD(127),FLDDEPC_OUT,0,                  UDG1F402.57     
     &             FLDDEPC,1,64,IEEE_TYPE)                                 UDG1F402.58     
        CALL BUFFO32(NFTOUT,FLDDEPC_OUT,FIXHD(126)*FIXHD(127),LEN_IO,A)    WRITHE1A.407    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.408    
        IF(LPVP)THEN                                                       UDG2F404.126    
          I= CRI2CRAY(2,FIXHD(126)*FIXHD(127),FLDDEPC_OUT,0,FLDDEPC,1)     UDG2F404.127    
        ELSE                                                               UDG2F404.128    
          I= CRAY2CRI(2,FIXHD(126)*FIXHD(127),FLDDEPC,0,FLDDEPC_OUT,1)     UDG2F404.129    
        END IF                                                             UDG2F404.130    
        CALL BUFFOUT(NFTOUT,FLDDEPC_OUT,FIXHD(126)*FIXHD(127),LEN_IO,A)    WRITHE1A.410    
      ENDIF                                                                WRITHE1A.411    
*ELSE                                                                      WRITHE1A.412    
      CALL BUFFOUT(NFTOUT,FLDDEPC(1),FIXHD(126)*FIXHD(127),LEN_IO,A)       WRITHE1A.413    
*ENDIF                                                                     WRITHE1A.414    
                                                                           WRITHE1A.415    
C Check for I/O errors                                                     WRITHE1A.416    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(126)*FIXHD(127))THEN                WRITHE1A.417    
        CALL IOERROR('buffer out of field dependent constants',A,LEN_IO,   WRITHE1A.418    
     *               FIXHD(126)*FIXHD(127))                                WRITHE1A.419    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.420    
        ICODE=13                                                           WRITHE1A.421    
        RETURN                                                             WRITHE1A.422    
       ENDIF                                                               WRITHE1A.423    
                                                                           WRITHE1A.424    
       START_BLOCK=START_BLOCK+FIXHD(126)*FIXHD(127)                       WRITHE1A.425    
                                                                           WRITHE1A.426    
*IF DEF,MPP                                                                GPB0F305.448    
      IF (mype .EQ. 0) THEN                                                GPB0F305.449    
*ENDIF                                                                     GPB0F305.450    
       WRITE(6,'('' '')')                                                  WRITHE1A.427    
       WRITE(6,'('' FIELD DEPENDENT CONSTANTS'')')                         WRITHE1A.428    
       WRITE(6,'('' '',I8,'' 64-bit words long'')')FIXHD(126)*FIXHD(127)   WRITHE1A.429    
*IF DEF,MPP                                                                GPB0F305.451    
      ENDIF ! if mype .eq. 0                                               GPB0F305.452    
*ENDIF                                                                     GPB0F305.453    
                                                                           WRITHE1A.430    
      ENDIF                                                                WRITHE1A.431    
                                                                           WRITHE1A.432    
CL 8. Buffer out extra constants                                           WRITHE1A.433    
                                                                           WRITHE1A.434    
      IF(FIXHD(130).GT.0)THEN                                              WRITHE1A.435    
                                                                           WRITHE1A.436    
*IF DEF,DIAG81                                                             WRITHE1A.437    
C Check for error in file pointers                                         WRITHE1A.438    
       IF(FIXHD(130).NE.START_BLOCK)THEN                                   WRITHE1A.439    
        CALL POSERROR('extra constants',                                   WRITHE1A.440    
     *  START_BLOCK,130,FIXHD(130))                                        WRITHE1A.441    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.442    
        ICODE=14                                                           WRITHE1A.443    
        RETURN                                                             WRITHE1A.444    
       ENDIF                                                               WRITHE1A.445    
*ENDIF                                                                     WRITHE1A.446    
                                                                           WRITHE1A.447    
*IF DEF,IEEE                                                               WRITHE1A.448    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.449    
        I= CRI2IEG(3,FIXHD(131),EXTCNST_OUT,0,EXTCNST,1,64,IEEE_TYPE)      UDG1F402.60     
        CALL BUFFO32(NFTOUT,EXTCNST_OUT,FIXHD(131),LEN_IO,A)               WRITHE1A.451    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.452    
        IF(LPVP)THEN                                                       UDG2F404.131    
          I= CRI2CRAY(2,FIXHD(131),EXTCNST_OUT,0,EXTCNST,1)                UDG2F404.132    
        ELSE                                                               UDG2F404.133    
          I= CRAY2CRI(2,FIXHD(131),EXTCNST,0,EXTCNST_OUT,1)                UDG2F404.134    
        END IF                                                             UDG2F404.135    
        CALL BUFFOUT(NFTOUT,EXTCNST_OUT,FIXHD(131),LEN_IO,A)               WRITHE1A.454    
      ENDIF                                                                WRITHE1A.455    
*ELSE                                                                      WRITHE1A.456    
      CALL BUFFOUT(NFTOUT,EXTCNST(1),FIXHD(131),LEN_IO,A)                  WRITHE1A.457    
*ENDIF                                                                     WRITHE1A.458    
                                                                           WRITHE1A.459    
C Check for I/O errors                                                     WRITHE1A.460    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(131))THEN                           WRITHE1A.461    
        CALL IOERROR('buffer out extra constants',A,LEN_IO,                WRITHE1A.462    
     *               FIXHD(131))                                           WRITHE1A.463    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.464    
        ICODE=15                                                           WRITHE1A.465    
        RETURN                                                             WRITHE1A.466    
       ENDIF                                                               WRITHE1A.467    
                                                                           WRITHE1A.468    
       START_BLOCK=START_BLOCK+FIXHD(131)                                  WRITHE1A.469    
                                                                           WRITHE1A.470    
*IF DEF,MPP                                                                GPB0F305.454    
      IF (mype .EQ. 0) THEN                                                GPB0F305.455    
*ENDIF                                                                     GPB0F305.456    
       WRITE(6,'('' '')')                                                  WRITHE1A.471    
       WRITE(6,'('' EXTRA CONSTANTS'')')                                   WRITHE1A.472    
       WRITE(6,'('' '',I8,'' 64-bit words long'')')FIXHD(131)              WRITHE1A.473    
*IF DEF,MPP                                                                GPB0F305.457    
      ENDIF ! if mype .eq. 0                                               GPB0F305.458    
*ENDIF                                                                     GPB0F305.459    
                                                                           WRITHE1A.474    
      ENDIF                                                                WRITHE1A.475    
                                                                           WRITHE1A.476    
CL 9. Buffer out temporary history block                                   WRITHE1A.477    
                                                                           WRITHE1A.478    
      IF(FIXHD(135).GT.0)THEN                                              WRITHE1A.479    
                                                                           WRITHE1A.480    
*IF DEF,DIAG81                                                             WRITHE1A.481    
C Check for error in file pointers                                         WRITHE1A.482    
       IF(FIXHD(135).NE.START_BLOCK)THEN                                   WRITHE1A.483    
        CALL POSERROR('history',                                           WRITHE1A.484    
     *  START_BLOCK,136,FIXHD(136))                                        WRITHE1A.485    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.486    
        ICODE=16                                                           WRITHE1A.487    
        RETURN                                                             WRITHE1A.488    
       ENDIF                                                               WRITHE1A.489    
*ENDIF                                                                     WRITHE1A.490    
                                                                           WRITHE1A.491    
*IF DEF,IEEE                                                               WRITHE1A.492    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.493    
        I= CRI2IEG(3,FIXHD(136),DUMPHIST_OUT,0,DUMPHIST,1,64,IEEE_TYPE)    UDG1F402.62     
        CALL BUFFO32(NFTOUT,DUMPHIST_OUT,FIXHD(136),LEN_IO,A)              WRITHE1A.495    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.496    
        IF(LPVP)THEN                                                       UDG2F404.136    
          I= CRI2CRAY(2,FIXHD(136),DUMPHIST_OUT,0,DUMPHIST,1)              UDG2F404.137    
        ELSE                                                               UDG2F404.138    
          I= CRAY2CRI(2,FIXHD(136),DUMPHIST,0,DUMPHIST_OUT,1)              UDG2F404.139    
        END IF                                                             UDG2F404.140    
        CALL BUFFOUT(NFTOUT,DUMPHIST_OUT,FIXHD(136),LEN_IO,A)              WRITHE1A.498    
      ENDIF                                                                WRITHE1A.499    
*ELSE                                                                      WRITHE1A.500    
      CALL BUFFOUT(NFTOUT,DUMPHIST(1),FIXHD(136),LEN_IO,A)                 WRITHE1A.501    
*ENDIF                                                                     WRITHE1A.502    
                                                                           WRITHE1A.503    
C Check for I/O errors                                                     WRITHE1A.504    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(136))THEN                           WRITHE1A.505    
        CALL IOERROR('buffer out of history file',A,LEN_IO,                WRITHE1A.506    
     *               FIXHD(136))                                           WRITHE1A.507    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.508    
        ICODE=17                                                           WRITHE1A.509    
        RETURN                                                             WRITHE1A.510    
       ENDIF                                                               WRITHE1A.511    
                                                                           WRITHE1A.512    
       START_BLOCK=START_BLOCK+FIXHD(136)                                  WRITHE1A.513    
                                                                           WRITHE1A.514    
*IF DEF,MPP                                                                GPB0F305.460    
      IF (mype .EQ. 0) THEN                                                GPB0F305.461    
*ENDIF                                                                     GPB0F305.462    
       WRITE(6,'('' '')')                                                  WRITHE1A.515    
       WRITE(6,'('' TEMPORARY HISTORY BLOCK'')')                           WRITHE1A.516    
       WRITE(6,'('' '',I8,'' 64-bit words long'')')FIXHD(136)              WRITHE1A.517    
*IF DEF,MPP                                                                GPB0F305.463    
      ENDIF ! if mype .eq. 0                                               GPB0F305.464    
*ENDIF                                                                     GPB0F305.465    
                                                                           WRITHE1A.518    
      ENDIF                                                                WRITHE1A.519    
                                                                           WRITHE1A.520    
CL 10. Buffer out compressed field index1                                  WRITHE1A.521    
                                                                           WRITHE1A.522    
      IF(FIXHD(140).GT.0)THEN                                              WRITHE1A.523    
                                                                           WRITHE1A.524    
*IF DEF,DIAG81                                                             WRITHE1A.525    
C Check for error in file pointers                                         WRITHE1A.526    
                                                                           WRITHE1A.527    
       IF(FIXHD(140).NE.START_BLOCK)THEN                                   WRITHE1A.528    
        CALL POSERROR('compressed field index1',                           WRITHE1A.529    
     *  START_BLOCK,140,FIXHD(140))                                        WRITHE1A.530    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.531    
        ICODE=18                                                           WRITHE1A.532    
        RETURN                                                             WRITHE1A.533    
       ENDIF                                                               WRITHE1A.534    
*ENDIF                                                                     WRITHE1A.535    
                                                                           WRITHE1A.536    
                                                                           WRITHE1A.537    
*IF DEF,IEEE                                                               WRITHE1A.538    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.539    
        I= CRI2IEG(2,FIXHD(141),CFI1_OUT,0,CFI1,1,64,IEEE_TYPE)            UDG1F402.64     
        CALL BUFFO32(NFTOUT,CFI1_OUT,FIXHD(141),LEN_IO,A)                  WRITHE1A.541    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.542    
        CALL BUFFOUT(NFTOUT,CFI1(1),FIXHD(141),LEN_IO,A)                   WRITHE1A.543    
      ENDIF                                                                WRITHE1A.544    
*ELSE                                                                      WRITHE1A.545    
      CALL BUFFOUT(NFTOUT,CFI1(1),FIXHD(141),LEN_IO,A)                     WRITHE1A.546    
*ENDIF                                                                     WRITHE1A.547    
                                                                           WRITHE1A.548    
C Check for I/O errors                                                     WRITHE1A.549    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(141))THEN                           WRITHE1A.550    
        CALL IOERROR('buffer out of compressed index1',A,LEN_IO,           WRITHE1A.551    
     *               FIXHD(141))                                           WRITHE1A.552    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.553    
        ICODE=19                                                           WRITHE1A.554    
        RETURN                                                             WRITHE1A.555    
       ENDIF                                                               WRITHE1A.556    
                                                                           WRITHE1A.557    
       START_BLOCK=START_BLOCK+FIXHD(141)                                  WRITHE1A.558    
                                                                           WRITHE1A.559    
*IF DEF,MPP                                                                GPB0F305.466    
      IF (mype .EQ. 0) THEN                                                GPB0F305.467    
*ENDIF                                                                     GPB0F305.468    
       WRITE(6,'('' '')')                                                  WRITHE1A.560    
       WRITE(6,'('' COMPRESSED FIELD INDEX NO 1'')')                       WRITHE1A.561    
       WRITE(6,'('' '',I8,'' 64-bit words long'')')FIXHD(141)              WRITHE1A.562    
*IF DEF,MPP                                                                GPB0F305.469    
      ENDIF ! if mype .eq. 0                                               GPB0F305.470    
*ENDIF                                                                     GPB0F305.471    
                                                                           WRITHE1A.563    
      ENDIF                                                                WRITHE1A.564    
                                                                           WRITHE1A.565    
CL 11. Buffer out compressed field index2                                  WRITHE1A.566    
                                                                           WRITHE1A.567    
      IF(FIXHD(142).GT.0)THEN                                              WRITHE1A.568    
                                                                           WRITHE1A.569    
*IF DEF,DIAG81                                                             WRITHE1A.570    
C Check for error in file pointers                                         WRITHE1A.571    
       IF(FIXHD(142).NE.START_BLOCK)THEN                                   WRITHE1A.572    
        CALL POSERROR('compressed field index2',                           WRITHE1A.573    
     *  START_BLOCK,142,FIXHD(142))                                        WRITHE1A.574    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.575    
        ICODE=20                                                           WRITHE1A.576    
        RETURN                                                             WRITHE1A.577    
       ENDIF                                                               WRITHE1A.578    
*ENDIF                                                                     WRITHE1A.579    
                                                                           WRITHE1A.580    
*IF DEF,IEEE                                                               WRITHE1A.581    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.582    
        I= CRI2IEG(2,FIXHD(143),CFI2_OUT,0,CFI2,1,64,IEEE_TYPE)            UDG1F402.65     
        CALL BUFFO32(NFTOUT,CFI2_OUT,FIXHD(143),LEN_IO,A)                  WRITHE1A.584    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.585    
        CALL BUFFOUT(NFTOUT,CFI2(1),FIXHD(143),LEN_IO,A)                   WRITHE1A.586    
      ENDIF                                                                WRITHE1A.587    
*ELSE                                                                      WRITHE1A.588    
      CALL BUFFOUT(NFTOUT,CFI2(1),FIXHD(143),LEN_IO,A)                     WRITHE1A.589    
*ENDIF                                                                     WRITHE1A.590    
                                                                           WRITHE1A.591    
C Check for I/O errors                                                     WRITHE1A.592    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(143))THEN                           WRITHE1A.593    
       CALL IOERROR('buffer out of compressed index2',A,LEN_IO,            WRITHE1A.594    
     *               FIXHD(143))                                           WRITHE1A.595    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.596    
        ICODE=21                                                           WRITHE1A.597    
        RETURN                                                             WRITHE1A.598    
       ENDIF                                                               WRITHE1A.599    
                                                                           WRITHE1A.600    
       START_BLOCK=START_BLOCK+FIXHD(143)                                  WRITHE1A.601    
                                                                           WRITHE1A.602    
*IF DEF,MPP                                                                GPB0F305.472    
      IF (mype .EQ. 0) THEN                                                GPB0F305.473    
*ENDIF                                                                     GPB0F305.474    
       WRITE(6,'('' '')')                                                  WRITHE1A.603    
       WRITE(6,'('' COMPRESSED FIELD INDEX NO 2'')')                       WRITHE1A.604    
       WRITE(6,'('' '',I8,'' 64-bit words long'')')FIXHD(143)              WRITHE1A.605    
*IF DEF,MPP                                                                GPB0F305.475    
      ENDIF ! if mype .eq. 0                                               GPB0F305.476    
*ENDIF                                                                     GPB0F305.477    
                                                                           WRITHE1A.606    
      ENDIF                                                                WRITHE1A.607    
                                                                           WRITHE1A.608    
CL 12. Buffer out compressed field index3                                  WRITHE1A.609    
                                                                           WRITHE1A.610    
      IF(FIXHD(144).GT.0)THEN                                              WRITHE1A.611    
                                                                           WRITHE1A.612    
*IF DEF,DIAG81                                                             WRITHE1A.613    
C Check for error in file pointers                                         WRITHE1A.614    
       IF(FIXHD(144).NE.START_BLOCK)THEN                                   WRITHE1A.615    
        CALL POSERROR('compressed field index3',                           WRITHE1A.616    
     *  START_BLOCK,144,FIXHD(144))                                        WRITHE1A.617    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.618    
        ICODE=22                                                           WRITHE1A.619    
        RETURN                                                             WRITHE1A.620    
       ENDIF                                                               WRITHE1A.621    
*ENDIF                                                                     WRITHE1A.622    
                                                                           WRITHE1A.623    
*IF DEF,IEEE                                                               WRITHE1A.624    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.625    
        I= CRI2IEG(2,FIXHD(145),CFI3_OUT,0,CFI3,1,64,IEEE_TYPE)            UDG1F402.66     
        CALL BUFFO32(NFTOUT,CFI3_OUT,FIXHD(145),LEN_IO,A)                  WRITHE1A.627    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.628    
        CALL BUFFOUT(NFTOUT,CFI3(1),FIXHD(145),LEN_IO,A)                   WRITHE1A.629    
      ENDIF                                                                WRITHE1A.630    
*ELSE                                                                      WRITHE1A.631    
      CALL BUFFOUT(NFTOUT,CFI3(1),FIXHD(145),LEN_IO,A)                     WRITHE1A.632    
*ENDIF                                                                     WRITHE1A.633    
                                                                           WRITHE1A.634    
C Check for I/O errors                                                     WRITHE1A.635    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(145))THEN                           WRITHE1A.636    
        CALL IOERROR('buffer out of compressed index3',A,LEN_IO,           WRITHE1A.637    
     *               FIXHD(145))                                           WRITHE1A.638    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.639    
        ICODE=23                                                           WRITHE1A.640    
        RETURN                                                             WRITHE1A.641    
       ENDIF                                                               WRITHE1A.642    
                                                                           WRITHE1A.643    
       START_BLOCK=START_BLOCK+FIXHD(145)                                  WRITHE1A.644    
                                                                           WRITHE1A.645    
*IF DEF,MPP                                                                GPB0F305.478    
      IF (mype .EQ. 0) THEN                                                GPB0F305.479    
*ENDIF                                                                     GPB0F305.480    
       WRITE(6,'('' '')')                                                  WRITHE1A.646    
       WRITE(6,'('' COMPRESSED FIELD INDEX NO 3'')')                       WRITHE1A.647    
       WRITE(6,'('' '',I8,'' 64-bit words long'')')FIXHD(145)              WRITHE1A.648    
*IF DEF,MPP                                                                GPB0F305.481    
      ENDIF ! if mype .eq. 0                                               GPB0F305.482    
*ENDIF                                                                     GPB0F305.483    
                                                                           WRITHE1A.649    
      ENDIF                                                                WRITHE1A.650    
                                                                           WRITHE1A.651    
CL 13. Buffer out lookup table                                             WRITHE1A.652    
                                                                           WRITHE1A.653    
      IF(FIXHD(150).GT.0)THEN                                              WRITHE1A.654    
*IF DEF,IEEE                                                               UBC0F402.1      
c                                                                          UBC0F402.2      
      if(start_block.ne.fixhd(150)) then                                   UBC0F402.3      
        if(start_block.gt.fixhd(150)) then                                 UBC0F402.4      
          write(6,9975) start_block-1, fixhd(150)-1                        UBC0F402.5      
9975      format(/                                                         UBC0F402.6      
     2     10(/'**** ERROR - Current Disk Address is greater than',        UBC0F402.7      
     3     ' the Address in the Fixed Length Header for the',              UBC0F402.8      
     4     ' Lookup Table *****'))                                         UBC0F402.9      
          call abort('CONVIEEE: Fixed length Header Error')                UBC0F402.10     
        else                                                               UBC0F402.11     
          write(6,9976) start_block-1, fixhd(150)-1                        UBC0F402.12     
9976      format(                                                          UBC0F402.13     
     2     10(/'**** WARNING - Current Disk Address does not match',       UBC0F402.14     
     3     ' the Address in the Fixed Length Header for the',              UBC0F402.15     
     4     ' Lookup Table *****')//                                        UBC0F402.16     
     5     'Current Address altered from ',i10,' to ',i10,                 UBC0F402.17     
     6     ' to match the Fixed Length Header'/)                           UBC0F402.18     
          start_block=fixhd(150)                                           UBC0F402.19     
          if(ieee_type.eq.32) then                                         UBC0F402.20     
            call setpos32(nftout, start_block-1, j)                        UBC0F402.21     
          else                                                             UBC0F402.22     
            call setpos(nftout, start_block-1, j)                          UBC0F402.23     
          endif                                                            UBC0F402.24     
        endif                                                              UBC0F402.25     
      endif                                                                UBC0F402.26     
*ENDIF                                                                     UBC0F402.27     
                                                                           WRITHE1A.655    
*IF DEF,DIAG81                                                             WRITHE1A.656    
C Check for error in file pointers                                         WRITHE1A.657    
       IF(FIXHD(150).NE.START_BLOCK)THEN                                   WRITHE1A.658    
        CALL POSERROR('lookup table',                                      WRITHE1A.659    
     *  START_BLOCK,150,FIXHD(150))                                        WRITHE1A.660    
        CMESSAGE='WRITHEAD: Addressing conflict'                           WRITHE1A.661    
        ICODE=24                                                           WRITHE1A.662    
        RETURN                                                             WRITHE1A.663    
       ENDIF                                                               WRITHE1A.664    
*ENDIF                                                                     WRITHE1A.665    
                                                                           WRITHE1A.666    
*IF DEF,IEEE                                                               WRITHE1A.667    
      IF(IEEE_TYPE.EQ.32)THEN                                              WRITHE1A.668    
        DO I=1,FIXHD(152)                                                  WRITHE1A.669    
        J= CRI2IEG(2,45,LOOKUP_O32(1,I),0,LOOKUP(1,I),1,64,IEEE_TYPE)      UDG1F402.67     
        J= CRI2IEG(3,19,LOOKUP_O32(23,I),32,LOOKUP(46,I),1,64,IEEE_TYPE)   UDG1F402.68     
        IF (FIXHD(5).EQ.6.OR.FIXHD(5).EQ.7.OR.   ! 6=ACOBS 7=VAROBS        UDG1F405.1291   
     &      FIXHD(5).EQ.8.OR.FIXHD(5).EQ.10)THEN ! 8=CX   10=OBSTORE       UDG1F405.1292   
          J=CRI2IEG(2,64,LOOKUP_O32(33,I),0,LOOKUP(65,I),                  UDG1F402.69     
     &              1,64,IEEE_TYPE)                                        UDG1F402.70     
        ENDIF                                                              UTS0F400.5      
        ENDDO                                                              WRITHE1A.672    
        CALL BUFFO32(NFTOUT,LOOKUP_O32,FIXHD(151)*FIXHD(152),LEN_IO,A)     WRITHE1A.673    
      ELSEIF(IEEE_TYPE.EQ.64)THEN                                          WRITHE1A.674    
        DO I=1,FIXHD(152)                                                  WRITHE1A.675    
         IF(LPVP)THEN                                                      UDG2F404.141    
           J= CRI2CRAY(0,45,LOOKUP_O64(1,I),0,LOOKUP(1,I),1)               UDG2F404.142    
           J= CRI2CRAY(2,19,LOOKUP_O64(46,I),0,LOOKUP(46,I),1)             UDG2F404.143    
         ELSE                                                              UDG2F404.144    
           J= CRAY2CRI(0,45,LOOKUP(1,I),0,LOOKUP_O64(1,I),1)               UDG2F404.145    
           J= CRAY2CRI(2,19,LOOKUP(46,I),0,LOOKUP_O64(46,I),1)             UDG2F404.146    
         END IF                                                            UDG2F404.147    
        IF (FIXHD(5).EQ.6.OR.FIXHD(5).EQ.7.OR.   ! 6=ACOBS 7=VAROBS        UDG1F405.1293   
     &      FIXHD(5).EQ.8.OR.FIXHD(5).EQ.10)THEN ! 8=CX   10=OBSTORE       UDG1F405.1294   
           IF(LPVP)THEN                                                    UDG2F404.148    
             J= CRI2CRAY(0,64,LOOKUP_O64(65,I),0,LOOKUP(65,I),1)           UDG2F404.149    
           ELSE                                                            UDG2F404.150    
             J= CRAY2CRI(0,64,LOOKUP(65,I),0,LOOKUP_O64(65,I),1)           UDG2F404.151    
           END IF                                                          UDG2F404.152    
        ENDIF                                                              UTS0F400.8      
        ENDDO                                                              WRITHE1A.678    
        CALL BUFFOUT(NFTOUT,LOOKUP_O64,FIXHD(151)*FIXHD(152),LEN_IO,A)     WRITHE1A.679    
      ENDIF                                                                WRITHE1A.680    
*ELSE                                                                      WRITHE1A.681    
      CALL BUFFOUT(NFTOUT,LOOKUP(1,1),FIXHD(151)*FIXHD(152),LEN_IO,A)      WRITHE1A.682    
*ENDIF                                                                     WRITHE1A.683    
                                                                           WRITHE1A.684    
C Check for I/O errors                                                     WRITHE1A.685    
       IF(A.NE.-1.0.OR.LEN_IO.NE.FIXHD(151)*FIXHD(152))THEN                WRITHE1A.686    
        CALL IOERROR('buffer out of lookup table',A,LEN_IO,                WRITHE1A.687    
     *               FIXHD(151)*FIXHD(152))                                WRITHE1A.688    
        CMESSAGE='WRITHEAD: I/O error'                                     WRITHE1A.689    
        ICODE=25                                                           WRITHE1A.690    
        RETURN                                                             WRITHE1A.691    
       ENDIF                                                               WRITHE1A.692    
                                                                           WRITHE1A.693    
       START_BLOCK=START_BLOCK+FIXHD(151)*FIXHD(152)                       WRITHE1A.694    
                                                                           WRITHE1A.695    
*IF DEF,MPP                                                                GPB0F305.484    
      IF (mype .EQ. 0) THEN                                                GPB0F305.485    
*ENDIF                                                                     GPB0F305.486    
       WRITE(6,'('' '')')                                                  WRITHE1A.696    
       WRITE(6,'('' LOOKUP TABLE'')')                                      WRITHE1A.697    
       WRITE(6,'('' '',I8,'' 64-bit words long'')')FIXHD(151)*FIXHD(152)   WRITHE1A.698    
*IF DEF,MPP                                                                GPB0F305.487    
      ENDIF ! if mype .eq. 0                                               GPB0F305.488    
*ENDIF                                                                     GPB0F305.489    
                                                                           WRITHE1A.699    
*IF -DEF,MPP                                                               GPB0F305.490    
C Check LOOKUP for consistency with PARAMETER statements                   WRITHE1A.700    
      CALL CHK_LOOK(FIXHD,LOOKUP,LEN1_LOOKUP,LEN_DATA,                     GDG0F401.1663   
*CALL ARGPPX                                                               GDG0F401.1664   
     &              ICODE,CMESSAGE)                                        GDG0F401.1665   
                                                                           GDG0F401.1666   
*ELSE                                                                      GPB0F305.491    
C No consistency checks for parallel code. The LOOKUP headers don't        GPB0F305.492    
C match the data layout in memory within a PE.                             GPB0F305.493    
*ENDIF                                                                     GPB0F305.494    
                                                                           WRITHE1A.703    
      ENDIF                                                                WRITHE1A.704    
                                                                           WRITHE1A.705    
      RETURN                                                               WRITHE1A.706    
      END                                                                  WRITHE1A.707    
*ENDIF                                                                     WRITHE1A.708