*IF DEF,C70_1A,OR,DEF,RECON,OR,DEF,FLDOP                                   GLW1F404.28     
C ******************************COPYRIGHT******************************    GTS2F400.3241   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.3242   
C                                                                          GTS2F400.3243   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.3244   
C restrictions as set forth in the contract.                               GTS2F400.3245   
C                                                                          GTS2F400.3246   
C                Meteorological Office                                     GTS2F400.3247   
C                London Road                                               GTS2F400.3248   
C                BRACKNELL                                                 GTS2F400.3249   
C                Berkshire UK                                              GTS2F400.3250   
C                RG12 2SZ                                                  GTS2F400.3251   
C                                                                          GTS2F400.3252   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.3253   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.3254   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.3255   
C Modelling at the above address.                                          GTS2F400.3256   
C ******************************COPYRIGHT******************************    GTS2F400.3257   
C                                                                          GTS2F400.3258   
CLL  SUBROUTINE F_TYPE-----------------------------------------------      F_TYPE1.3      
CLL                                                                        F_TYPE1.4      
CLL  Purpose:  Returns each field code and associated field length from    F_TYPE1.5      
CLL            the PP header and a count of the number of fields           F_TYPE1.6      
CLL            of each type.                                               F_TYPE1.7      
CLL                                                                        F_TYPE1.8      
CLL  Written by A. Dickinson                                               F_TYPE1.9      
CLL                                                                        F_TYPE1.10     
CLL  Model            Modification history from model version 3.0:         F_TYPE1.11     
CLL version  Date                                                          F_TYPE1.12     
CLL                                                                        F_TYPE1.13     
CLL   3.1  05/02/93    Trap use of user defined PPXREF file                AD050293.63     
CLL                    Author: A. Dickinson    Reviewer: R. Stratton       AD050293.64     
CLL 3.4  16/6/94 : Change CHARACTER*(*) to CHARACTER*(80) N.Farnon         ANF0F304.13     
CLL   3.5  May 95     Submodels project. Replace call to RDPPXRF by        GSS1F305.168    
CLL                   function EXPPXC to extract name of diagnostic        GSS1F305.169    
CLL                   item.        S.J.Swarbrick                           GSS1F401.51     
CLL   4.1  Apr. 96    Rationalise *CALLs     S.J.Swarbrick                 GSS1F401.52     
CLL   4.4  28/10/97   Change format of printout. D. Robinson.              GDR7F404.481    
CLL                                                                        AD050293.65     
CLL Programming standard :                                                 F_TYPE1.14     
CLL                                                                        F_TYPE1.15     
CLL Logical components covered :                                           F_TYPE1.16     
CLL                                                                        F_TYPE1.17     
CLL Project task :                                                         F_TYPE1.18     
CLL                                                                        F_TYPE1.19     
CLL  Documentation: None                                                   F_TYPE1.20     
CLL                                                                        F_TYPE1.21     
CLLEND----------------------------------------------------------------     F_TYPE1.22     
C                                                                          F_TYPE1.23     
C*L  Arguments:-------------------------------------------------------     F_TYPE1.24     

      SUBROUTINE F_TYPE(LOOKUP,LEN2_LOOKUP,PP_NUM,N_TYPES                   9,1F_TYPE1.25     
     *,PP_LEN,PP_STASH,PP_TYPE,PP_POS,PP_LS,FIXHD,                         GSS1F305.172    
*CALL ARGPPX                                                               GSS1F305.173    
     *TITLE)                                                               GSS1F305.174    
                                                                           F_TYPE1.27     
      IMPLICIT NONE                                                        F_TYPE1.28     
                                                                           F_TYPE1.29     
      INTEGER                                                              F_TYPE1.30     
     * LEN2_LOOKUP             !IN 2nd dimension of LOOKUP                 F_TYPE1.31     
     *,N_TYPES                 !IN No of separate field types in file      F_TYPE1.32     
     *,LOOKUP(64,LEN2_LOOKUP)  !IN LOOKUP record                           F_TYPE1.33     
     *,PP_NUM(LEN2_LOOKUP)     !OUT No of successive fields with same co   F_TYPE1.34     
     *,PP_LEN(LEN2_LOOKUP)     !OUT Length of field                        F_TYPE1.35     
     *,PP_STASH(LEN2_LOOKUP)   !OUT PP code of field                       F_TYPE1.36     
     *,PP_TYPE(LEN2_LOOKUP)    !OUT Integer/real/timeseries                F_TYPE1.37     
     *,PP_POS(LEN2_LOOKUP)     !OUT Pointer to number of PP field          F_TYPE1.38     
     *,PP_LS(LEN2_LOOKUP)       !OUT Data stored on land or sea pts        F_TYPE1.39     
     *,FIXHD(*)                                                            F_TYPE1.40     
                                                                           F_TYPE1.41     
      CHARACTER*(80)TITLE                                                  ANF0F304.14     
                                                                           F_TYPE1.43     
                                                                           F_TYPE1.44     
C Comdecks: ------------------------------------------------------------   F_TYPE1.45     
*CALL CSUBMODL                                                             GSS1F305.175    
*CALL CPPXREF                                                              F_TYPE1.46     
*CALL PPXLOOK                                                              GSS1F305.177    
C Local variables: -----------------------------------------------------   GSS1F305.178    
      INTEGER MODEL             !Internal model number from LOOKUP         GSS1F305.179    
                                                                           F_TYPE1.47     
C Local arrays:---------------------------------------------------------   F_TYPE1.48     
      INTEGER                                                              F_TYPE1.49     
     * PP_XREF(PPXREF_CODELEN)  !PPXREF codes for a given section/item     F_TYPE1.50     
                                                                           F_TYPE1.51     
C External subroutines called:------------------------------------------   F_TYPE1.52     
      CHARACTER*36 EXPPXC                                                  GSS1F305.180    
      EXTERNAL EXPPXC,ABORT_IO                                             GSS1F305.181    
C*----------------------------------------------------------------------   F_TYPE1.54     
C*L  Local variables:---------------------------------------------------   F_TYPE1.55     
      INTEGER                                                              F_TYPE1.56     
     * ICODE      ! Error code                                             F_TYPE1.57     
     *,ITEM_CODE  ! STASH item code                                        F_TYPE1.58     
     *,SECTION    ! STASH section number                                   F_TYPE1.59     
                                                                           F_TYPE1.60     
      CHARACTER                                                            F_TYPE1.61     
     * CMESSAGE*80 ! Error message                                         F_TYPE1.62     
     *,PHRASE*(PPXREF_CHARLEN) ! Name of field                             F_TYPE1.63     
                                                                           F_TYPE1.64     
      INTEGER I,K                                                          F_TYPE1.65     
C*----------------------------------------------------------------------   F_TYPE1.66     
                                                                           F_TYPE1.67     
C Initialise arrays                                                        F_TYPE1.68     
      DO K=1,LEN2_LOOKUP                                                   F_TYPE1.69     
        PP_NUM(K)=1                                                        F_TYPE1.70     
        PP_LEN(K)=0                                                        F_TYPE1.71     
        PP_STASH(K)=0                                                      F_TYPE1.72     
        PP_TYPE(K)=0                                                       F_TYPE1.73     
        PP_POS(K)=0                                                        F_TYPE1.74     
        PP_LS(K)=0                                                         F_TYPE1.75     
      ENDDO                                                                F_TYPE1.76     
                                                                           F_TYPE1.77     
      N_TYPES=1                                                            F_TYPE1.78     
      PP_LEN(1)=LOOKUP(15,1)                                               F_TYPE1.79     
      PP_STASH(1)=LOOKUP(42,1)                                             F_TYPE1.80     
      PP_TYPE(1)=LOOKUP(39,1)                                              F_TYPE1.81     
      PP_POS(1)=1                                                          F_TYPE1.82     
        IF(MOD(INT(LOOKUP(21,1)/10),10).EQ.2)THEN                          F_TYPE1.83     
          PP_LS(1)=MOD(INT(LOOKUP(21,1)/100),10)                           F_TYPE1.84     
        ENDIF                                                              F_TYPE1.85     
                                                                           F_TYPE1.86     
      DO K=2,LEN2_LOOKUP                                                   F_TYPE1.87     
        IF(LOOKUP(42,K).EQ.LOOKUP(42,K-1).AND.                             F_TYPE1.88     
     &     LOOKUP(15,K).EQ.LOOKUP(15,K-1))THEN                             F_TYPE1.89     
          PP_NUM(N_TYPES)=PP_NUM(N_TYPES)+1                                F_TYPE1.90     
        ELSE                                                               F_TYPE1.91     
          N_TYPES=N_TYPES+1                                                F_TYPE1.92     
          PP_LEN(N_TYPES)=LOOKUP(15,K)                                     F_TYPE1.93     
          PP_STASH(N_TYPES)=LOOKUP(42,K)                                   F_TYPE1.94     
          PP_TYPE(N_TYPES)=LOOKUP(39,K)                                    F_TYPE1.95     
          PP_POS(N_TYPES)=PP_POS(N_TYPES-1)+PP_NUM(N_TYPES-1)              F_TYPE1.96     
        IF(MOD(INT(LOOKUP(21,K)/10),10).EQ.2)THEN                          F_TYPE1.97     
          PP_LS(N_TYPES)=MOD(INT(LOOKUP(21,K)/100),10)                     F_TYPE1.98     
        ENDIF                                                              F_TYPE1.99     
        ENDIF                                                              F_TYPE1.100    
      ENDDO                                                                F_TYPE1.101    
                                                                           F_TYPE1.102    
C Print out details of fields                                              F_TYPE1.103    
      WRITE(6,'(''  '',/,'' '',A/)')TITLE                                  GSS1F305.182    
      I=1                                                                  F_TYPE1.105    
      DO K=1,N_TYPES                                                       F_TYPE1.106    
        PHRASE=' '                                                         F_TYPE1.107    
        ITEM_CODE=MOD(LOOKUP(42,I),1000)                                   F_TYPE1.108    
        SECTION=(LOOKUP(42,I)-ITEM_CODE)/1000                              F_TYPE1.109    
        MODEL=LOOKUP(45,I)                                                 GSS1F305.183    
        PHRASE=EXPPXC(MODEL,SECTION,ITEM_CODE,                             GSS1F305.184    
*CALL ARGPPX                                                               GSS1F305.185    
     &              ICODE,CMESSAGE)                                        GSS1F305.186    
!       IF(ICODE.NE.0)THEN                                                 GSS1F305.187    
!         IF(ICODE.EQ.100)THEN                                             GSS1F305.188    
!           PHRASE='NON-STANDARD FIELD'                                    GSS1F305.189    
!         ELSE                                                             GSS1F305.190    
!         CALL ABORT_IO('F_TYPE',CMESSAGE,ICODE,1)                         GSS1F305.191    
!         ENDIF                                                            GSS1F305.192    
!       ENDIF                                                              GSS1F305.193    
        I=I+PP_NUM(K)                                                      F_TYPE1.115    
        WRITE(6,'('' '',I4,I5,I8,I4,2I6,2x,A36)')                          GDR7F404.482    
     &   PP_LS(K),PP_NUM(K),PP_LEN(K)                                      GDR7F404.483    
     *  ,PP_TYPE(K),PP_STASH(K),PP_POS(K),PHRASE                           F_TYPE1.117    
      ENDDO                                                                F_TYPE1.118    
                                                                           F_TYPE1.119    
      RETURN                                                               F_TYPE1.120    
      END                                                                  F_TYPE1.121    
*ENDIF                                                                     F_TYPE1.122