Juan 8/12/2016: add management of LEN_HREC in MNH & SURFEX
[MNH-git_open_source-lfs.git] / src / SURFEX / init_teb_veg_optionsn.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 INIT_TEB_VEG_OPTIONS_n(HPROGRAM)
7 !#############################################################
8 !
9 !!****  *INIT_TEB_TEB_VEG_n* - routine to initialize ISBA
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 !!      A. Lemonsu  *Meteo France*      
31 !!
32 !!    MODIFICATIONS
33 !!    -------------
34 !!      Original    09/2009
35 !!      B. Decharme 07/2011 : read pgd+prep
36 !-------------------------------------------------------------------------------
37 !
38 !*       0.    DECLARATIONS
39 !              ------------
40 USE MODD_READ_NAMELIST,   ONLY : LNAM_READ
41 !
42 USE MODD_TYPE_DATE_SURF
43 USE MODD_TYPE_SNOW
44 !
45 USE MODD_TEB_VEG_n,       ONLY: CROUGH,CISBA,CPEDOTF,LTR_ML,CPHOTO,CRUNOFF,CALBEDO,   &
46                                 CSCOND, CC1DRY, CSOILFRZ, CDIFSFCOND, CSNOWRES,       &
47                                 CRESPSL,NNBIOMASS, CSOC,                              & 
48                                 CCPSURF, CHORT, CKSAT, CTOPREG, XCGMAX, XCDRAG
49 !
50 USE MODD_TEB_GARDEN_n,    ONLY: NGROUND_LAYER, XSOILGRID
51
52 USE MODD_CH_TEB_n,        ONLY: LCH_BIO_FLUX  
53
54 USE MODD_DATA_COVER_PAR,  ONLY: NVEGTYPE
55 USE MODD_SURF_PAR,        ONLY: XUNDEF, NUNDEF
56 USE MODD_DIAG_MISC_TEB_n, ONLY: LSURF_DIAG_ALBEDO
57 !
58 USE MODD_ISBA_PAR,        ONLY : XOPTIMGRID
59 !
60 USE MODN_TEB_n,           ONLY : XTSTEP
61 !
62 USE MODI_DEFAULT_ISBA
63 USE MODI_DEFAULT_CH_DEP
64 USE MODI_DEFAULT_CH_BIO_FLUX
65 USE MODI_READ_DEFAULT_TEB_VEG_n
66 USE MODI_READ_TEB_VEG_CONF_n
67 USE MODI_GET_LUOUT
68 USE MODI_READ_SURF
69 !
70 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
71 USE PARKIND1  ,ONLY : JPRB
72 !
73 IMPLICIT NONE
74 !
75 !*       0.1   Declarations of arguments
76 !              -------------------------
77 !
78  CHARACTER(LEN=6),                   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
79 !
80 !
81 !
82 !*       0.2   Declarations of local variables
83 !              -------------------------------
84 !
85 INTEGER           :: IVERSION, IBUGFIX  ! surface version
86 INTEGER           :: ILUOUT   ! unit of output listing file
87 INTEGER           :: IRESP    ! Error code after redding
88  CHARACTER(LEN=LEN_HREC) :: YRECFM   ! Name of the article to be read
89 !
90 !
91 REAL                              :: ZOUT_TSTEP
92  CHARACTER(LEN=3)                  :: YRAIN 
93 LOGICAL                           :: GCANOPY_DRAG
94 LOGICAL                           :: GGLACIER
95 LOGICAL                           :: GTRIP
96 LOGICAL                           :: GFLOOD
97 LOGICAL                           :: GVEGUPD
98 LOGICAL                           :: GSPINUPCARBS
99 LOGICAL                           :: GSPINUPCARBW
100 REAL                              :: ZSPINMAXS
101 REAL                              :: ZSPINMAXW
102 INTEGER                           :: INBYEARSPINS
103 INTEGER                           :: INBYEARSPINW
104 REAL(KIND=JPRB) :: ZHOOK_HANDLE
105 !
106 !-------------------------------------------------------------------------------
107 !
108 !               Initialisation for IO
109 !
110 IF (LHOOK) CALL DR_HOOK('INIT_TEB_VEG_OPTIONS_N',0,ZHOOK_HANDLE)
111  CALL GET_LUOUT(HPROGRAM,ILUOUT)
112 !
113 !               Other little things
114 !
115 LSURF_DIAG_ALBEDO = .FALSE.
116 !
117 IF (LNAM_READ) THEN
118  !
119  !*       1.     Defaults
120  !               --------
121  !
122  !        1.1. Hard defaults
123  !      
124  !       Definition of default options for ISBA (in MODD_TEB_VEG_n)
125  !       REM - TSTEP, OUT_TSTEP, CANOPY_DRAG are defined as local variables
126  !             because they are already in init_teb.f90 (these options are 
127  !             forced to the same values for TEB and urban green areas)
128  !
129  CALL DEFAULT_ISBA(XTSTEP, ZOUT_TSTEP,                         &
130                    CROUGH, CRUNOFF, CALBEDO, CSCOND,           &
131                    CC1DRY, CSOILFRZ, CDIFSFCOND, CSNOWRES,     &
132                    CCPSURF, XCGMAX, XCDRAG, CKSAT, CSOC,       &
133                    CTOPREG, YRAIN, CHORT, GFLOOD, GTRIP,       &
134                    GGLACIER, GCANOPY_DRAG, GVEGUPD,            &
135                    GSPINUPCARBS, GSPINUPCARBW,                 & 
136                    ZSPINMAXS, ZSPINMAXW,                       &
137                    INBYEARSPINS, INBYEARSPINW                  )
138  !
139  CALL DEFAULT_CH_BIO_FLUX(LCH_BIO_FLUX)
140  !
141 ENDIF
142 !        1.2. Defaults from file header
143 !    
144  CALL READ_DEFAULT_TEB_VEG_n(HPROGRAM)
145 !
146  CALL READ_TEB_VEG_CONF_n(HPROGRAM)
147 !
148 !-------------------------------------------------------------------------------
149 CRESPSL = 'DEF'
150 !-------------------------------------------------------------------------------
151 !
152 !         Initialisation for IO
153 !
154 !*       2.     Definition of version
155 !               ---------------------
156 !
157 YRECFM='VERSION'
158  CALL READ_SURF(HPROGRAM,YRECFM,IVERSION,IRESP)
159 !
160 YRECFM='BUG'
161  CALL READ_SURF(HPROGRAM,YRECFM,IBUGFIX,IRESP)
162 !
163 !*       2.     Initialisation of ISBA options
164 !               ------------------------------
165 !
166 !
167 YRECFM='TWN_ISBA'
168 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) YRECFM='GD_ISBA'
169  CALL READ_SURF(HPROGRAM,YRECFM,CISBA,IRESP)
170 !
171 IF (IVERSION>=7) THEN
172   !
173   YRECFM='TWN_PEDOTF'
174   IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) YRECFM='GD_PEDOTF'
175   CALL READ_SURF(HPROGRAM,YRECFM,CPEDOTF,IRESP)
176   !
177 ELSE
178   CPEDOTF = 'CH78'
179 ENDIF
180 !
181 YRECFM='TWN_PHOTO'
182 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) YRECFM='GD_PHOTO'
183  CALL READ_SURF(HPROGRAM,YRECFM,CPHOTO,IRESP)
184 !
185 YRECFM='TWN_LAYER'
186 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) YRECFM='GD_LAYER'
187  CALL READ_SURF(HPROGRAM,YRECFM,NGROUND_LAYER,IRESP)
188 !
189 !* new radiative transfert
190 !
191 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=2) THEN
192   !
193   YRECFM='TWN_TR_ML'
194   IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) YRECFM='GD_TR_ML'
195   CALL READ_SURF(HPROGRAM,YRECFM,LTR_ML,IRESP)
196   !
197 ELSE 
198   LTR_ML = .FALSE.
199 ENDIF
200 !
201 !* Reference grid for DIF
202 !
203 IF(CISBA=='DIF') THEN
204   ALLOCATE(XSOILGRID(NGROUND_LAYER))
205   XSOILGRID=XUNDEF
206   IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=2) THEN
207     YRECFM='TWN_SOILGRID'
208     IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) YRECFM='GD_SOILGRID'
209     CALL READ_SURF(HPROGRAM,YRECFM,XSOILGRID,IRESP,HDIR='-')
210   ELSE
211     XSOILGRID(1:NGROUND_LAYER)=XOPTIMGRID(1:NGROUND_LAYER)
212   ENDIF
213 ELSE
214   ALLOCATE(XSOILGRID(0))
215 ENDIF
216 !
217 !* number of biomass pools
218 !
219 NNBIOMASS=1
220 IF (CPHOTO=='NIT') NNBIOMASS=3
221 !
222 !-------------------------------------------------------------------------------
223 !
224 !
225 IF (LHOOK) CALL DR_HOOK('INIT_TEB_VEG_OPTIONS_N',1,ZHOOK_HANDLE)
226 END SUBROUTINE INIT_TEB_VEG_OPTIONS_n