*IF DEF,CONTROL,OR,DEF,RECON,OR,DEF,CAMDUMP,OR,DEF,FLDOP                   GAV0F405.90     
C ******************************COPYRIGHT******************************    GTS2F400.12480  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.12481  
C                                                                          GTS2F400.12482  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.12483  
C restrictions as set forth in the contract.                               GTS2F400.12484  
C                                                                          GTS2F400.12485  
C                Meteorological Office                                     GTS2F400.12486  
C                London Road                                               GTS2F400.12487  
C                BRACKNELL                                                 GTS2F400.12488  
C                Berkshire UK                                              GTS2F400.12489  
C                RG12 2SZ                                                  GTS2F400.12490  
C                                                                          GTS2F400.12491  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.12492  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.12493  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.12494  
C Modelling at the above address.                                          GTS2F400.12495  
C                                                                          GTS2F400.12496  
!+Decode the STASH level code                                              LEVCOD1.3      
! Subroutine Interface:                                                    LEVCOD1.4      

      SUBROUTINE LEVCOD(ILIN,ILOUT,ErrorStatus,CMESSAGE)                    9GSS3F401.647    
      IMPLICIT NONE                                                        LEVCOD1.7      
! Description:                                                             LEVCOD1.8      
!   Sets ILOUT to an appropriate level size according to the value of IL   LEVCOD1.9      
!   Level sizes are parametrised in comdeck MODEL.                         LEVCOD1.10     
!                                                                          LEVCOD1.12     
! Current code owner:  S.J.Swarbrick                                       LEVCOD1.13     
!                                                                          LEVCOD1.14     
! History:                                                                 LEVCOD1.15     
! Version   Date       Comment                                             LEVCOD1.16     
! =======   ====       =======                                             LEVCOD1.17     
!   3.5     Mar. 95    Original code.  S.J.Swarbrick                       LEVCOD1.18     
!   4.1     Apr. 96    Inclusion of wave model codes                       GSS3F401.648    
!                                      S.J.Swarbrick                       GSS3F401.649    
!   4.5     18/08/98   Added DEF,FLDOP   (A Van der Wal)                   GAV0F405.91     
!                                                                          LEVCOD1.19     
!  Code description:                                                       LEVCOD1.20     
!    FORTRAN 77 + common Fortran 90 extensions.                            LEVCOD1.21     
!    Written to UM programming standards version 7.                        LEVCOD1.22     
!                                                                          LEVCOD1.23     
!  System component covered:                                               LEVCOD1.24     
!  System task:               Sub-Models Project                           LEVCOD1.25     
!                                                                          LEVCOD1.26     
! Global variables:                                                        LEVCOD1.27     
                                                                           LEVCOD1.28     
*CALL CSUBMODL                                                             LEVCOD1.29     
*CALL VERSION                                                              LEVCOD1.30     
*CALL TYPSIZE                                                              GSS3F401.650    
*CALL MODEL                                                                GSS3F401.651    
*CALL CNTLATM                                                              GSS3F401.652    
                                                                           LEVCOD1.33     
! Subroutine arguments:                                                    LEVCOD1.34     
!   Scalar arguments with intent(in):                                      GSS3F401.653    
      INTEGER ILIN    ! Model level code                                   LEVCOD1.38     
                                                                           LEVCOD1.39     
!   Scalar arguments with intent(out):                                     LEVCOD1.40     
      INTEGER ILOUT   ! An actual level                                    LEVCOD1.42     
      CHARACTER*80 CMESSAGE                                                GSS3F401.654    
                                                                           LEVCOD1.43     
! Local scalars:                                                           LEVCOD1.44     
      INTEGER I                                                            LEVCOD1.46     
      INTEGER J                                                            LEVCOD1.47     
                                                                           GSS3F401.655    
! ErrorStatus:                                                             GSS3F401.656    
      INTEGER ErrorStatus                                                  GSS3F401.657    
                                                                           LEVCOD1.48     
!- End of Header ---------------------------------------------------       LEVCOD1.49     
                                                                           LEVCOD1.50     
      IF(ILIN.EQ.1) THEN                                                   LEVCOD1.51     
! First atmos level                                                        GSS3F401.658    
        ILOUT=1                                                            LEVCOD1.52     
      ELSE IF(ILIN.EQ.2) THEN                                              LEVCOD1.53     
! Top atmos level                                                          GSS3F401.659    
        ILOUT=P_LEVELS                                                     LEVCOD1.54     
      ELSE IF(ILIN.EQ.3) THEN                                              LEVCOD1.55     
! Top wet level                                                            GSS3F401.660    
        ILOUT=Q_LEVELS                                                     LEVCOD1.56     
      ELSE IF(ILIN.EQ.4) THEN                                              LEVCOD1.57     
        ILOUT=P_LEVELS-1                                                   LEVCOD1.58     
      ELSE IF(ILIN.EQ.5) THEN                                              LEVCOD1.59     
! First boundary layer level                                               GSS3F401.661    
        ILOUT=MIN(1,BL_LEVELS)                                             LEVCOD1.60     
      ELSE IF(ILIN.EQ.6) THEN                                              LEVCOD1.61     
! Last boundary layer level                                                GSS3F401.662    
        ILOUT=BL_LEVELS                                                    LEVCOD1.62     
      ELSE IF(ILIN.EQ.7) THEN                                              LEVCOD1.63     
        ILOUT=BL_LEVELS+1                                                  LEVCOD1.64     
      ELSE IF(ILIN.EQ.8) THEN                                              LEVCOD1.65     
! First soil level                                                         GSS3F401.663    
        ILOUT=MIN(1,ST_LEVELS)                                             GSS3F401.664    
      ELSE IF(ILIN.EQ.9) THEN                                              LEVCOD1.67     
! Last soil level                                                          GSS3F401.665    
        ILOUT=ST_LEVELS                                                    GSS3F401.666    
      ELSE IF(ILIN.EQ.10) THEN                                             LEVCOD1.69     
! First tracer level                                                       GSS3F401.667    
        ILOUT=P_LEVELS-TR_LEVELS+1                                         LEVCOD1.70     
      ELSE IF(ILIN.EQ.11) THEN                                             LEVCOD1.71     
! Last tracer level                                                        GSS3F401.668    
        ILOUT=P_LEVELS                                                     LEVCOD1.72     
      ELSE IF(ILIN.EQ.12) THEN                                             LEVCOD1.73     
        ILOUT=P_LEVELS+1                                                   LEVCOD1.74     
      ELSE IF(ILIN.EQ.13) THEN                                             LEVCOD1.75     
! First gravity wave drag level                                            GSS3F401.669    
        ILOUT=StLevGWdrag                                                  LEVCOD1.76     
      ELSE IF(ILIN.EQ.14) THEN                                             LEVCOD1.77     
! Last gravity wave drag level                                             GSS3F401.670    
        ILOUT=P_LEVELS                                                     LEVCOD1.78     
      ELSE IF(ILIN.EQ.15) THEN                                             LEVCOD1.79     
        ILOUT=BotVDiffLev                                                  LEVCOD1.80     
      ELSE IF(ILIN.EQ.16) THEN                                             LEVCOD1.81     
        ILOUT=TopVDiffLev-1                                                LEVCOD1.82     
      ELSE IF(ILIN.EQ.17) THEN                                             LEVCOD1.83     
        ILOUT=TopVDiffLev                                                  LEVCOD1.84     
      ELSE IF(ILIN.EQ.18) THEN                                             LEVCOD1.85     
        ILOUT=BL_LEVELS-1                                                  LEVCOD1.86     
      ELSE IF(ILIN.EQ.19) THEN                                             LEVCOD1.87     
        ILOUT=P_LEVELS+1                                                   LEVCOD1.88     
      ELSE IF(ILIN.EQ.20) THEN                                             LEVCOD1.89     
        ILOUT=MIN(2,ST_LEVELS)                                             GSS3F401.671    
      ELSE IF(ILIN.EQ.21) THEN                                             LEVCOD1.91     
        ILOUT=1                                                            LEVCOD1.92     
      ELSE IF(ILIN.EQ.22) THEN                                             LEVCOD1.93     
        ILOUT=NLEVSO                                                       LEVCOD1.94     
      ELSE IF(ILIN.EQ.23) THEN                                             LEVCOD1.95     
        ILOUT=OZONE_LEVELS                                                 LEVCOD1.96     
      ELSE IF(ILIN.EQ.24) THEN                                             LEVCOD1.97     
        ILOUT=P_LEVELS*H_SWBANDS                                           LEVCOD1.98     
      ELSE IF(ILIN.EQ.25) THEN                                             LEVCOD1.99     
        ILOUT=(P_LEVELS+1)*H_SWBANDS                                       LEVCOD1.100    
      ELSE IF(ILIN.EQ.26) THEN                                             LEVCOD1.101    
        ILOUT=Q_LEVELS*H_SWBANDS                                           LEVCOD1.102    
      ELSE IF(ILIN.EQ.27) THEN                                             LEVCOD1.103    
        ILOUT=P_LEVELS*H_LWBANDS                                           LEVCOD1.104    
      ELSE IF(ILIN.EQ.28) THEN                                             LEVCOD1.105    
        ILOUT=(P_LEVELS+1)*H_LWBANDS                                       LEVCOD1.106    
      ELSE IF(ILIN.EQ.29) THEN                                             LEVCOD1.107    
        ILOUT=Q_LEVELS*H_LWBANDS                                           LEVCOD1.108    
      ELSE IF(ILIN.EQ.30) THEN                                             LEVCOD1.109    
        ILOUT=2                                                            LEVCOD1.110    
      ELSE IF(ILIN.EQ.32) THEN                                             LEVCOD1.113    
        ILOUT=H_SWBANDS                                                    LEVCOD1.114    
      ELSE IF(ILIN.EQ.33) THEN                                             LEVCOD1.115    
        ILOUT=H_LWBANDS                                                    LEVCOD1.116    
      ELSE IF(ILIN.EQ.34) THEN                                             LEVCOD1.117    
        ILOUT=SM_LEVELS                                                    GSS3F401.672    
      ELSE IF(ILIN.EQ.35) THEN                                             LEVCOD1.119    
        ILOUT=CLOUD_LEVELS                                                 LEVCOD1.120    
      ELSE IF(ILIN.EQ.36) THEN                                             GSS3F401.673    
! Wave model first level (direction)                                       GSS3F401.674    
        ILOUT=1                                                            GSS3F401.675    
      ELSE IF(ILIN.EQ.37) THEN                                             GSS3F401.676    
! Wave model last level (direction)                                        GSS3F401.677    
        ILOUT=NANG                                                         GSS3F401.678    
      ELSE IF(ILIN.EQ.41) THEN                                             GSS1F400.1461   
        ILOUT=OASLEV(1)                                                    GSS1F400.1462   
!       Allow room for expansion of ocean assimilation groups.             GSS1F400.1463   
      ELSE IF(ILIN.EQ.42) THEN                                             GSS1F400.1464   
        ILOUT=OASLEV(2)                                                    GSS1F400.1465   
!       Allow room for expansion of ocean assimilation groups.             GSS1F400.1466   
      ELSE IF(ILIN.EQ.43) THEN                                             GSS1F400.1467   
        ILOUT=OASLEV(3)                                                    GSS1F400.1468   
!       Allow room for expansion of ocean assimilation groups.             GSS1F400.1469   
      ELSE IF(ILIN.EQ.44) THEN                                             GSS1F400.1470   
        ILOUT=OASLEV(4)                                                    GSS1F400.1471   
!       Allow room for expansion of ocean assimilation groups.             GSS1F400.1472   
      ELSE IF(ILIN.EQ.45) THEN                                             GSS1F400.1473   
        ILOUT=OASLEV(5)                                                    GSS1F400.1474   
!       Allow room for expansion of ocean assimilation groups.             GSS1F400.1475   
      ELSE IF(ILIN.EQ.46) THEN                                             GSS1F400.1476   
        ILOUT=OASLEV(6)                                                    GSS1F400.1477   
!       Allow room for expansion of ocean assimilation groups.             GSS1F400.1478   
      ELSE                                                                 LEVCOD1.121    
        WRITE(6,*)'LEVCOD: IMPOSSIBLE LEVEL CODE FOUND ',ILIN              LEVCOD1.122    
        ErrorStatus=1                                                      GSS3F401.679    
      END IF                                                               LEVCOD1.124    
                                                                           LEVCOD1.125    
      RETURN                                                               LEVCOD1.126    
      END                                                                  LEVCOD1.127    
*ENDIF                                                                     LEVCOD1.128