Juan 8/12/2016: add management of LEN_HREC in MNH & SURFEX
[MNH-git_open_source-lfs.git] / src / SURFEX / read_pgd_teb_gardenn.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_PGD_TEB_GARDEN_n(HPROGRAM,KVERSION,KBUGFIX)
7 !     #########################################
8 !
9 !!****  *READ_PGD_TEB_GARDEN_n* - routine to initialise ISBA physiographic variables 
10 !!
11 !!    PURPOSE
12 !!    -------
13 !!
14 !!**  METHOD
15 !!    ------
16 !!
17 !!    EXTERNAL
18 !!    --------
19 !!
20 !!
21 !!    IMPLICIT ARGUMENTS
22 !!    ------------------
23 !!
24 !!    REFERENCE
25 !!    ---------
26 !!
27 !!
28 !!    AUTHOR
29 !!    ------
30 !!      V. Masson   *Meteo France*      
31 !!
32 !!    MODIFICATIONS
33 !!    -------------
34 !!      Original    01/2003 
35 !!      P. Le Moigne  12/2004 : add type of photosynthesis
36 !!      B. Decharme      2008 : add XWDRAIN
37 !-------------------------------------------------------------------------------
38 !
39 !*       0.    DECLARATIONS
40 !              ------------
41 !
42 USE MODD_SURF_PAR,        ONLY : XUNDEF
43 USE MODD_TEB_n,           ONLY : LECOCLIMAP
44 USE MODD_TEB_GARDEN_n,    ONLY :  XCLAY, XSAND, NGROUND_LAYER,    &
45                                   XRUNOFFB, XWDRAIN, LPAR_GARDEN                           
46 USE MODD_GR_BIOG_GARDEN_n,ONLY : XISOPOT, XMONOPOT
47 USE MODD_CH_TEB_n,        ONLY : LCH_BIO_FLUX
48 USE MODD_TEB_GRID_n,      ONLY : NDIM
49 USE MODD_ISBA_PAR,        ONLY : XOPTIMGRID
50 !
51 USE MODI_READ_PGD_TEB_GARDEN_PAR_n
52 USE MODI_READ_SURF
53 !
54 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
55 USE PARKIND1  ,ONLY : JPRB
56 !
57 USE MODI_GET_TYPE_DIM_n
58 !
59 IMPLICIT NONE
60 !
61 !*       0.1   Declarations of arguments
62 !              -------------------------
63 !
64  CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! calling program
65 INTEGER,           INTENT(IN)  :: KVERSION ! version of SURFEX of the file being read
66 INTEGER,           INTENT(IN)  :: KBUGFIX
67 !
68 !*       0.2   Declarations of local variables
69 !              -------------------------------
70 !
71 INTEGER           :: IRESP          ! Error code after redding
72 !
73  CHARACTER(LEN=LEN_HREC) :: YRECFM         ! Name of the article to be read
74 !
75 INTEGER           :: JLAYER         ! loop counter on layers
76 REAL(KIND=JPRB) :: ZHOOK_HANDLE
77 !
78 !-------------------------------------------------------------------------------
79 !
80 !* 1D physical dimension
81 !
82 IF (LHOOK) CALL DR_HOOK('READ_PGD_TEB_GARDEN_N',0,ZHOOK_HANDLE)
83 YRECFM='SIZE_TOWN'
84  CALL GET_TYPE_DIM_n('TOWN  ',NDIM)
85 !
86 !
87 !* clay fraction : attention, seul un niveau est present dans le fichier
88 !* on rempli tout les niveaux de  XCLAY avec les valeurs du fichiers
89 !
90 ALLOCATE(XCLAY(NDIM,NGROUND_LAYER))
91 YRECFM='TWN_CLAY'
92 IF (KVERSION>7 .OR. KVERSION==7 .AND. KBUGFIX>=3) YRECFM='GD_CLAY'
93  CALL READ_SURF(HPROGRAM,YRECFM,XCLAY(:,1),IRESP)
94 DO JLAYER=2,NGROUND_LAYER
95   XCLAY(:,JLAYER)=XCLAY(:,1)
96 END DO
97 !
98 !* sand fraction
99 !
100 ALLOCATE(XSAND(NDIM,NGROUND_LAYER))
101 YRECFM='TWN_SAND'
102 IF (KVERSION>7 .OR. KVERSION==7 .AND. KBUGFIX>=3) YRECFM='GD_SAND'
103  CALL READ_SURF(HPROGRAM,YRECFM,XSAND(:,1),IRESP)
104 DO JLAYER=2,NGROUND_LAYER
105   XSAND(:,JLAYER)=XSAND(:,1)
106 END DO
107 !
108 !* orographic runoff coefficient
109 !
110 ALLOCATE(XRUNOFFB(NDIM))
111 YRECFM='TWN_RUNOFFB'
112 IF (KVERSION>7 .OR. KVERSION==7 .AND. KBUGFIX>=3) YRECFM='GD_RUNOFFB'
113  CALL READ_SURF(HPROGRAM,YRECFM,XRUNOFFB,IRESP)
114 !
115 !* subgrid drainage coefficient
116 !
117 ALLOCATE(XWDRAIN(NDIM))
118 IF (KVERSION<=3) THEN
119   XWDRAIN = 0.
120 ELSE
121   YRECFM='TWN_WDRAIN'
122   IF (KVERSION>7 .OR. KVERSION==7 .AND. KBUGFIX>=3) YRECFM='GD_WDRAIN'
123   CALL READ_SURF(HPROGRAM,YRECFM,XWDRAIN,IRESP)
124 ENDIF
125 !
126 !-------------------------------------------------------------------------------
127 !
128 !* biogenic chemical emissions
129 !
130 IF (LCH_BIO_FLUX) THEN
131   ALLOCATE(XISOPOT(NDIM))
132   YRECFM='EMIS_ISOPOT'
133   CALL READ_SURF(HPROGRAM,YRECFM,XISOPOT,IRESP)
134   !
135   ALLOCATE(XMONOPOT(NDIM))
136   YRECFM='EMIS_MONOPOT'
137   CALL READ_SURF(HPROGRAM,YRECFM,XMONOPOT,IRESP)
138 ELSE
139   ALLOCATE(XISOPOT (0))
140   ALLOCATE(XMONOPOT(0))
141 END IF
142 !
143 !-------------------------------------------------------------------------------
144 !
145 !*       4.     Physiographic data fields not to be computed by ecoclimap
146 !               ---------------------------------------------------------
147 !
148 IF (KVERSION>=7) THEN
149   YRECFM='PAR_GARDEN'
150   CALL READ_SURF(HPROGRAM,YRECFM,LPAR_GARDEN,IRESP)
151 ELSEIF (.NOT.LECOCLIMAP) THEN
152   LPAR_GARDEN = .TRUE.
153 ELSE
154   LPAR_GARDEN = .FALSE.
155 ENDIF
156 !
157 IF (LPAR_GARDEN) CALL READ_PGD_TEB_GARDEN_PAR_n(HPROGRAM)
158 IF (LHOOK) CALL DR_HOOK('READ_PGD_TEB_GARDEN_N',1,ZHOOK_HANDLE)
159 !
160 !
161 !-------------------------------------------------------------------------------
162 !
163 END SUBROUTINE READ_PGD_TEB_GARDEN_n