Juan 8/12/2016: add management of LEN_HREC in MNH & SURFEX
[MNH-git_open_source-lfs.git] / src / SURFEX / read_covern.F90
1 !SURFEX_LIC Copyright 1994-2014 Meteo-France 
2 !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C  licence
3 !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SURFEX_LIC for details. version 1.
5 !     #########
6       SUBROUTINE READ_COVER_n(HPROGRAM)
7 !     ################################
8 !
9 !!****  *READ_COVER_n* - routine to read a file for
10 !!                         physiographic data file of model _n 
11 !!
12 !!    PURPOSE
13 !!    -------
14 !!       The purpose of this routine is to initialise the 
15 !!       physiographic data file.
16 !!
17 !!
18 !!**  METHOD
19 !!    ------
20 !!      The data are read in the initial surface file :
21 !!        - 2D physiographic data fields
22 !!          
23 !!      It does not read the grid definition. This should have been
24 !!      read already.
25 !!
26 !!    EXTERNAL
27 !!    --------
28 !!      
29 !!
30 !!
31 !!    IMPLICIT ARGUMENTS
32 !!    ------------------
33 !!
34 !!    REFERENCE
35 !!    ---------
36 !!
37 !!
38 !!    AUTHOR
39 !!    ------
40 !!      V. Masson   *Meteo France*      
41 !!
42 !!    MODIFICATIONS
43 !!    -------------
44 !!      Original    01/2003
45 !-------------------------------------------------------------------------------
46 !
47 !*       0.    DECLARATIONS
48 !              ------------
49 !
50 USE MODD_SURF_ATM_n,     ONLY : XSEA, XWATER, XNATURE, XTOWN, &
51                                 XCOVER, XZS, TTIME, LCOVER, NSIZE_FULL
52 !
53 USE MODD_DATA_COVER_PAR, ONLY : NBARE_SOIL, JPCOVER
54 !
55 USE MODI_READ_LCOVER
56 USE MODI_READ_SURF
57 USE MODI_CONVERT_COVER_FRAC
58 !
59 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
60 USE PARKIND1  ,ONLY : JPRB
61 !
62 IMPLICIT NONE
63 !
64 !*       0.1   Declarations of arguments
65 !              -------------------------
66 !
67  CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! calling program
68 !
69 !*       0.2   Declarations of local variables
70 !              -------------------------------
71 !
72
73 INTEGER           :: IRESP          ! Error code after redding
74
75 INTEGER           :: IVERSION       ! surface version
76 !
77  CHARACTER(LEN=LEN_HREC) :: YRECFM         ! Name of the article to be read
78 REAL(KIND=JPRB) :: ZHOOK_HANDLE
79 !
80 !-------------------------------------------------------------------------------
81 !
82 !
83 !*       2.     Physiographic data fields:
84 !               -------------------------
85 !
86 !*       2.1    Cover classes :
87 !               -------------
88 !
89 IF (LHOOK) CALL DR_HOOK('READ_COVER_N',0,ZHOOK_HANDLE)
90 !
91 YRECFM='VERSION'
92  CALL READ_SURF(HPROGRAM,YRECFM,IVERSION,IRESP)
93 !
94 ALLOCATE(LCOVER(JPCOVER))
95  CALL READ_LCOVER(HPROGRAM,LCOVER)
96 !
97 !
98 ALLOCATE(XCOVER(NSIZE_FULL,JPCOVER))
99  CALL READ_SURF(HPROGRAM,'COVER',XCOVER(:,:),LCOVER,IRESP)
100 !
101 !*       2.1    Fractions :
102 !               ---------
103 !
104 ALLOCATE(XSEA   (NSIZE_FULL))
105 ALLOCATE(XNATURE(NSIZE_FULL))
106 ALLOCATE(XWATER (NSIZE_FULL))
107 ALLOCATE(XTOWN  (NSIZE_FULL))
108 !
109 IF (IVERSION>=7) THEN
110   !
111   CALL READ_SURF(HPROGRAM,'FRAC_SEA   ',XSEA,   IRESP)
112   CALL READ_SURF(HPROGRAM,'FRAC_NATURE',XNATURE,IRESP)
113   CALL READ_SURF(HPROGRAM,'FRAC_WATER ',XWATER, IRESP)
114   CALL READ_SURF(HPROGRAM,'FRAC_TOWN  ',XTOWN,  IRESP)
115   !
116 ELSE
117   CALL CONVERT_COVER_FRAC(XCOVER,XSEA,XNATURE,XTOWN,XWATER)
118 ENDIF
119 !
120 !*       2.2    Orography :
121 !               ---------
122 !
123 !
124 ALLOCATE(XZS(NSIZE_FULL))
125 YRECFM='ZS'
126  CALL READ_SURF(HPROGRAM,YRECFM,XZS(:),IRESP)
127 IF (LHOOK) CALL DR_HOOK('READ_COVER_N',1,ZHOOK_HANDLE)
128 !
129 !
130 !-------------------------------------------------------------------------------
131 !
132 END SUBROUTINE READ_COVER_n