*IF DEF,RECON                                                              INMOSES1.2      
C *****************************COPYRIGHT******************************     INMOSES1.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    INMOSES1.4      
C                                                                          INMOSES1.5      
C Use, duplication or disclosure of this code is subject to the            INMOSES1.6      
C restrictions as set forth in the contract.                               INMOSES1.7      
C                                                                          INMOSES1.8      
C                Meteorological Office                                     INMOSES1.9      
C                London Road                                               INMOSES1.10     
C                BRACKNELL                                                 INMOSES1.11     
C                Berkshire UK                                              INMOSES1.12     
C                RG12 2SZ                                                  INMOSES1.13     
C                                                                          INMOSES1.14     
C If no contract has been raised with this copy of the code, the use,      INMOSES1.15     
C duplication or disclosure of it is strictly prohibited.  Permission      INMOSES1.16     
C to do so must first be obtained in writing from the Head of Numerical    INMOSES1.17     
C Modelling at the above address.                                          INMOSES1.18     
C ******************************COPYRIGHT******************************    INMOSES1.19     

      SUBROUTINE INIT_MOSES(P_FIELD,SM_LEVELS,ST_LEVELS,FIXHD,              1,27INMOSES1.20     
     &                      LEN1_LOOKUP,LEN2_LOOKUP,LOOKUP,                INMOSES1.21     
     &                      LAND_POINTS,NFTOUT,N_TYPES,PP_ITEMC,PP_POS,    INMOSES1.22     
*CALL ARGPPX                                                               INMOSES1.23     
     &                      D1_SMCL,D1_TDEEP,D1_VSAT,D1_BEXP,D1_SATHH)     INMOSES1.24     
! Subroutine arguments                                                     INMOSES1.25     
                                                                           INMOSES1.26     
!   Scalar arguments with intent(IN) :                                     INMOSES1.27     
      INTEGER       P_FIELD           !Length of field                     INMOSES1.28     
      INTEGER       SM_LEVELS         !Number of soil moisture levels      INMOSES1.29     
      INTEGER       ST_LEVELS         !Number of soil temperature levels   INMOSES1.30     
      INTEGER       LEN1_LOOKUP       !1st dim. of lookup table            INMOSES1.31     
      INTEGER       LEN2_LOOKUP       !2nd dim. of lookup table            INMOSES1.32     
      INTEGER       LAND_POINTS       !Number of land points               INMOSES1.33     
      INTEGER       NFTOUT            !Output unit number                  INMOSES1.34     
      INTEGER       N_TYPES           !Number of different field types     INMOSES1.35     
!   Array arguments with intent(IN) :                                      INMOSES1.36     
      INTEGER       FIXHD(*)          !Fixed length header                 INMOSES1.37     
      INTEGER       LOOKUP(LEN1_LOOKUP,LEN2_LOOKUP)                        INMOSES1.38     
                                      !Lookup table                        INMOSES1.39     
      INTEGER       PP_ITEMC(N_TYPES) !Item code    |For each field        INMOSES1.40     
      INTEGER       PP_POS(N_TYPES)   !Position     |type on output file   INMOSES1.41     
      REAL          D1_SMCL(P_FIELD,SM_LEVELS)   !                         INMOSES1.42     
      REAL          D1_TDEEP(P_FIELD,ST_LEVELS)  !                         INMOSES1.43     
      REAL          D1_VSAT(P_FIELD)             !Work space               INMOSES1.44     
      REAL          D1_BEXP(P_FIELD)             !                         INMOSES1.45     
      REAL          D1_SATHH(P_FIELD)            !                         INMOSES1.46     
! External subroutines called:                                             INMOSES1.47     
      EXTERNAL LOCATE,ABORT_IO,READFLDS,ABORT                              INMOSES1.48     
! Local scalars:                                                           INMOSES1.49     
      INTEGER       ICODE             !Error code                          INMOSES1.50     
      INTEGER       POS               !Position indicator                  INMOSES1.51     
      CHARACTER*256 CMESSAGE          !Error message if ICODE > 0          INMOSES1.52     
! Local arrays:                                                            INMOSES1.53     
      REAL          D1_STHU(P_FIELD,SM_LEVELS)   !Work space               INMOSES1.54     
      REAL          D1_STHF(P_FIELD,SM_LEVELS)   !                         INMOSES1.55     
! Comdecks:                                                                INMOSES1.56     
*CALL CSUBMODL                                                             INMOSES1.57     
*CALL CPPXREF                                                              INMOSES1.58     
*CALL PPXLOOK                                                              INMOSES1.59     
*CALL SOIL_THICK                                                           INMOSES1.60     
!----------------------------------------------------------------------    INMOSES1.61     
!           Locate fields in output dump that are needed to                INMOSES1.62     
!           initialise soil moisture fractions                             INMOSES1.63     
            WRITE (6,*) ' '                                                INMOSES1.64     
            WRITE (6,*) ' No soil moisture fraction in input dump'         INMOSES1.65     
            WRITE (6,*) ' Soil moisture fraction being initialised'        INMOSES1.66     
            CALL LOCATE (9,PP_ITEMC,N_TYPES,POS)                           INMOSES1.67     
            IF (POS.EQ.0) THEN                                             INMOSES1.68     
              CMESSAGE =                                                   INMOSES1.69     
     &        'INIT_MOSES: Problem with initialising STHU'                 INMOSES1.70     
              WRITE (6,*) 'SMC in layers not found in output dump'         INMOSES1.71     
              CALL ABORT                                                   INMOSES1.72     
            ELSE                                                           INMOSES1.73     
              CALL READFLDS (NFTOUT,SM_LEVELS,PP_POS(POS),                 INMOSES1.74     
     &                       LOOKUP,LEN1_LOOKUP,                           INMOSES1.75     
     &                       D1_SMCL,P_FIELD,FIXHD,                        INMOSES1.76     
*CALL ARGPPX                                                               INMOSES1.77     
     &                       ICODE,CMESSAGE)                               INMOSES1.78     
              IF (ICODE.GT.0) THEN                                         INMOSES1.79     
                WRITE (6,*) ' Problem with reading SMCL field'             INMOSES1.80     
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            INMOSES1.81     
              END IF                                                       INMOSES1.82     
            END IF                                                         INMOSES1.83     
            CALL LOCATE (20,PP_ITEMC,N_TYPES,POS)                          INMOSES1.84     
            IF (POS.EQ.0) THEN                                             INMOSES1.85     
              CMESSAGE =                                                   INMOSES1.86     
     &        'INIT_MOSES: Problem with initialising STHU'                 INMOSES1.87     
              WRITE (6,*) 'TDEEP in layers not found in output dump'       INMOSES1.88     
              CALL ABORT                                                   INMOSES1.89     
            ELSE                                                           INMOSES1.90     
              CALL READFLDS (NFTOUT,ST_LEVELS,PP_POS(POS),                 INMOSES1.91     
     &                       LOOKUP,LEN1_LOOKUP,                           INMOSES1.92     
     &                       D1_TDEEP,P_FIELD,FIXHD,                       INMOSES1.93     
*CALL ARGPPX                                                               INMOSES1.94     
     &                       ICODE,CMESSAGE)                               INMOSES1.95     
              IF (ICODE.GT.0) THEN                                         INMOSES1.96     
                WRITE (6,*) ' Problem with reading TDEEP field'            INMOSES1.97     
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            INMOSES1.98     
              END IF                                                       INMOSES1.99     
            END IF                                                         INMOSES1.100    
            CALL LOCATE (43,PP_ITEMC,N_TYPES,POS)                          INMOSES1.101    
            IF (POS.EQ.0) THEN                                             INMOSES1.102    
              CMESSAGE =                                                   INMOSES1.103    
     &        'INIT_MOSES: Problem with initialising STHU'                 INMOSES1.104    
              WRITE (6,*) 'V_SAT not found in output dump'                 INMOSES1.105    
              CALL ABORT                                                   INMOSES1.106    
            ELSE                                                           INMOSES1.107    
              CALL READFLDS (NFTOUT,1,PP_POS(POS),                         INMOSES1.108    
     &                       LOOKUP,LEN1_LOOKUP,                           INMOSES1.109    
     &                       D1_VSAT,P_FIELD,FIXHD,                        INMOSES1.110    
*CALL ARGPPX                                                               INMOSES1.111    
     &                       ICODE,CMESSAGE)                               INMOSES1.112    
              IF (ICODE.GT.0) THEN                                         INMOSES1.113    
                WRITE (6,*) ' Problem with reading V_SAT field'            INMOSES1.114    
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            INMOSES1.115    
              END IF                                                       INMOSES1.116    
            END IF                                                         INMOSES1.117    
            CALL LOCATE (207,PP_ITEMC,N_TYPES,POS)                         INMOSES1.118    
            IF (POS.EQ.0) THEN                                             INMOSES1.119    
              CMESSAGE =                                                   INMOSES1.120    
     &        'INIT_MOSES: Problem with initialising STHU'                 INMOSES1.121    
              WRITE (6,*) 'Clapp-H B Coeff not found in output dump'       INMOSES1.122    
              CALL ABORT                                                   INMOSES1.123    
            ELSE                                                           INMOSES1.124    
              CALL READFLDS (NFTOUT,1,PP_POS(POS),                         INMOSES1.125    
     &                       LOOKUP,LEN1_LOOKUP,                           INMOSES1.126    
     &                       D1_BEXP,P_FIELD,FIXHD,                        INMOSES1.127    
*CALL ARGPPX                                                               INMOSES1.128    
     &                       ICODE,CMESSAGE)                               INMOSES1.129    
              IF (ICODE.GT.0) THEN                                         INMOSES1.130    
                WRITE (6,*) ' Problem with reading B exponent field.'      INMOSES1.131    
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            INMOSES1.132    
              END IF                                                       INMOSES1.133    
            END IF                                                         INMOSES1.134    
            CALL LOCATE (48,PP_ITEMC,N_TYPES,POS)                          INMOSES1.135    
            IF (POS.EQ.0) THEN                                             INMOSES1.136    
              CMESSAGE =                                                   INMOSES1.137    
     &        'INIT_MOSES: Problem with initialising STHU'                 INMOSES1.138    
              WRITE (6,*) 'SATHH not found in output dump'                 INMOSES1.139    
              CALL ABORT                                                   INMOSES1.140    
            ELSE                                                           INMOSES1.141    
              CALL READFLDS (NFTOUT,1,PP_POS(POS),                         INMOSES1.142    
     &                       LOOKUP,LEN1_LOOKUP,                           INMOSES1.143    
     &                       D1_SATHH,P_FIELD,FIXHD,                       INMOSES1.144    
*CALL ARGPPX                                                               INMOSES1.145    
     &                       ICODE,CMESSAGE)                               INMOSES1.146    
              IF (ICODE.GT.0) THEN                                         INMOSES1.147    
                WRITE (6,*) ' Problem with reading SATHH field'            INMOSES1.148    
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            INMOSES1.149    
              END IF                                                       INMOSES1.150    
            END IF                                                         INMOSES1.151    
                                                                           INMOSES1.152    
! Initialise unfrozen and frozen soil moisture fractions                   INMOSES1.153    
! using subroutine FREEZE_SOIL                                             INMOSES1.154    
            CALL FREEZE_SOIL(LAND_POINTS,SM_LEVELS,D1_BEXP,DZSOIL,         INMOSES1.155    
     &                  D1_SATHH,D1_SMCL,D1_TDEEP,D1_VSAT,                 INMOSES1.156    
     &                  D1_STHU,D1_STHF)                                   INMOSES1.157    
            CALL LOCATE (214,PP_ITEMC,N_TYPES,POS)                         INMOSES1.158    
            CALL WRITFLDS (NFTOUT,SM_LEVELS,PP_POS(POS),                   INMOSES1.159    
     &                     LOOKUP,LEN1_LOOKUP,                             INMOSES1.160    
     &                     D1_STHU,LAND_POINTS,FIXHD,                      INMOSES1.161    
*CALL ARGPPX                                                               INMOSES1.162    
     &                     ICODE,CMESSAGE)                                 INMOSES1.163    
            IF (ICODE.GT.0) THEN                                           INMOSES1.164    
              WRITE (6,*) ' Problem with writing STHU'                     INMOSES1.165    
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)              INMOSES1.166    
            END IF                                                         INMOSES1.167    
            WRITE (6,*) ' STHU (Stash Code 214) has ',                     INMOSES1.168    
     &      'been initialised using subroutine FREEZE_SOIL'                INMOSES1.169    
            CALL LOCATE (215,PP_ITEMC,N_TYPES,POS)                         INMOSES1.170    
            CALL WRITFLDS (NFTOUT,SM_LEVELS,PP_POS(POS),                   INMOSES1.171    
     &                     LOOKUP,LEN1_LOOKUP,                             INMOSES1.172    
     &                     D1_STHF,LAND_POINTS,FIXHD,                      INMOSES1.173    
*CALL ARGPPX                                                               INMOSES1.174    
     &                     ICODE,CMESSAGE)                                 INMOSES1.175    
            IF (ICODE.GT.0) THEN                                           INMOSES1.176    
              WRITE (6,*) ' Problem with writing STHF'                     INMOSES1.177    
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)              INMOSES1.178    
            END IF                                                         INMOSES1.179    
            WRITE (6,*) ' STHF (Stash Code 215) has ',                     INMOSES1.180    
     &      'been initialised using subroutine FREEZE_SOIL'                INMOSES1.181    
                                                                           INMOSES1.182    
            RETURN                                                         INMOSES1.183    
            END                                                            INMOSES1.184    
*ENDIF                                                                     INMOSES1.185