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.
6 SUBROUTINE READ_ISBA_n(HPROGRAM)
7 ! ##################################
9 !!**** *READ_ISBA_n* - routine to initialise ISBA variables
31 !! V. Masson *Meteo France*
37 !! READ_SURF for general reading : 08/2003 (S.Malardel)
38 !! B. Decharme 2008 : Floodplains
39 !! B. Decharme 01/2009 : Optional Arpege deep soil temperature read
40 !! A.L. Gibelin 03/09 : modifications for CENTURY model
41 !! A.L. Gibelin 04/2009 : BIOMASS and RESP_BIOMASS arrays
42 !! A.L. Gibelin 06/2009 : Soil carbon variables for CNT option
43 !! B. Decharme 09/2012 : suppress NWG_LAYER (parallelization problems)
44 !! M.Moge 01/2016 using READ_SURF_FIELD2D/3D for 2D/3D surfex fields reads
46 !-------------------------------------------------------------------------------
52 USE MODD_CO2V_PAR, ONLY : XANFMINIT, XCONDCTMIN
53 USE MODD_ISBA_n, ONLY : NGROUND_LAYER, NPATCH, NNBIOMASS, &
54 NNLITTER, NNLITTLEVS, NNSOILCARB, &
55 CPHOTO, CRESPSL, XTSRAD_NAT, &
56 XTG, XWG, XWGI, XWR, XLAI, TSNOW, &
57 XRESA, XANFM, XAN, XLE, XANDAY, &
58 XBSLAI, XBIOMASS, XRESP_BIOMASS, &
59 XLITTER, XSOILCARB, XLIGNIN_STRUC, &
60 LFLOOD, XZ0_FLOOD, LTEMP_ARP, &
61 NTEMPLAYER_ARP, LGLACIER, XICE_STO
63 USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF
64 USE MODD_SNOW_PAR, ONLY : XZ0SN
67 USE MODI_READ_SURF_FIELD3D
68 USE MODI_READ_SURF_FIELD2D
72 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
73 USE PARKIND1 ,ONLY : JPRB
75 USE MODI_GET_TYPE_DIM_n
79 !* 0.1 Declarations of arguments
80 ! -------------------------
82 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
84 !* 0.2 Declarations of local variables
85 ! -------------------------------
86 INTEGER :: ILU ! 1D physical dimension
88 INTEGER :: IRESP ! Error code after redding
90 CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be read
92 CHARACTER(LEN=4) :: YLVL
93 CHARACTER(LEN=8) :: YPATCH
95 REAL, DIMENSION(:,:),ALLOCATABLE :: ZWORK ! 2D array to write data in file
97 INTEGER :: IWORK ! Work integer
99 INTEGER :: JP, JL, JNBIOMASS, JNLITTER, JNSOILCARB, JNLITTLEVS ! loop counter on layers
101 INTEGER :: IVERSION ! surface version
104 REAL(KIND=JPRB) :: ZHOOK_HANDLE
106 !-------------------------------------------------------------------------------
109 !* 1D physical dimension
111 IF (LHOOK) CALL DR_HOOK('READ_ISBA_N',0,ZHOOK_HANDLE)
113 CALL GET_TYPE_DIM_n('NATURE',ILU)
116 !* 2. Prognostic fields:
119 ALLOCATE(ZWORK(ILU,NPATCH))
128 ALLOCATE(XTG(ILU,IWORK,NPATCH))
131 CALL READ_SURF_FIELD3D(HPROGRAM,XTG,1,IWORK,YRECFM)
134 !* soil liquid and ice water contents
136 ALLOCATE(XWG (ILU,NGROUND_LAYER,NPATCH))
137 ALLOCATE(XWGI(ILU,NGROUND_LAYER,NPATCH))
143 CALL READ_SURF_FIELD3D(HPROGRAM,XWG,1,NGROUND_LAYER,YRECFM)
146 CALL READ_SURF_FIELD3D(HPROGRAM,XWGI,1,NGROUND_LAYER,YRECFM)
148 !* water intercepted on leaves
150 ALLOCATE(XWR(ILU,NPATCH))
153 CALL READ_SURF_FIELD2D(HPROGRAM,XWR,YRECFM)
155 !* roughness length of Flood water
158 ALLOCATE(XZ0_FLOOD(ILU,NPATCH))
160 CALL READ_SURF_FIELD2D(HPROGRAM,XZ0_FLOOD,YRECFM)
165 IF (CPHOTO=='LAI' .OR. CPHOTO=='LST' .OR. CPHOTO=='NIT' .OR. CPHOTO=='NCB') THEN
167 CALL READ_SURF_FIELD2D(HPROGRAM,XLAI,YRECFM)
172 CALL READ_GR_SNOW(HPROGRAM,'VEG',' ',ILU,NPATCH,TSNOW )
175 CALL READ_SURF(HPROGRAM,YRECFM,IVERSION,IRESP)
178 CALL READ_SURF(HPROGRAM,YRECFM,IBUGFIX,IRESP)
181 ALLOCATE(XICE_STO(ILU,NPATCH))
182 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=2) THEN
184 CALL READ_SURF_FIELD2D(HPROGRAM,XICE_STO,YRECFM)
190 !-------------------------------------------------------------------------------
192 !* 4. Semi-prognostic variables
193 ! -------------------------
195 ALLOCATE(XRESA(ILU,NPATCH))
196 ALLOCATE(XLE (ILU,NPATCH))
197 IF (CPHOTO/='NON') THEN
198 ALLOCATE(XANFM (ILU,NPATCH))
199 ALLOCATE(XAN (ILU,NPATCH))
200 ALLOCATE(XANDAY (ILU,NPATCH))
203 IF(CPHOTO/='NON') THEN
204 ALLOCATE(XBIOMASS (ILU,NNBIOMASS,NPATCH))
205 ALLOCATE(XRESP_BIOMASS (ILU,NNBIOMASS,NPATCH))
209 !* aerodynamical resistance
213 CALL READ_SURF_FIELD2D(HPROGRAM,XRESA,YRECFM)
215 !* patch averaged radiative temperature (K)
217 ALLOCATE(XTSRAD_NAT(ILU))
221 XTSRAD_NAT(:)=XTSRAD_NAT(:)+XTG(:,1,JP)
223 XTSRAD_NAT(:)=XTSRAD_NAT(:)/NPATCH
226 CALL READ_SURF(HPROGRAM,YRECFM,XTSRAD_NAT(:),IRESP)
231 !* 5. ISBA-AGS variables
233 IF (CPHOTO/='NON') THEN
236 CALL READ_SURF_FIELD2D(HPROGRAM,XAN,YRECFM)
240 CALL READ_SURF_FIELD2D(HPROGRAM,XANDAY,YRECFM)
243 XANFM(:,:) = XANFMINIT
244 CALL READ_SURF_FIELD2D(HPROGRAM,XANFM,YRECFM)
248 CALL READ_SURF_FIELD2D(HPROGRAM,XLE,YRECFM)
251 IF (CPHOTO=='AGS' .OR. CPHOTO=='AST') THEN
254 XRESP_BIOMASS(:,:,:) = 0.
256 ELSEIF (CPHOTO=='LAI' .OR. CPHOTO=='LST') THEN
258 XBIOMASS(:,1,:) = XBSLAI(:,:) * XLAI(:,:)
259 XRESP_BIOMASS(:,:,:) = 0.
261 ELSEIF (CPHOTO=='NIT') THEN
264 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) THEN
269 CALL READ_SURF_FIELD3D(HPROGRAM,XBIOMASS,1,NNBIOMASS,YRECFM)
271 XRESP_BIOMASS(:,:,:) = 0.
272 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) THEN
277 CALL READ_SURF_FIELD3D(HPROGRAM,XRESP_BIOMASS,2,NNBIOMASS,YRECFM)
279 ELSEIF (CPHOTO=='NCB') THEN
282 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) THEN
287 CALL READ_SURF_FIELD3D(HPROGRAM,XBIOMASS,1,NNBIOMASS,YRECFM)
289 XRESP_BIOMASS(:,:,:) = 0.
290 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) THEN
295 CALL READ_SURF_FIELD3D(HPROGRAM,XRESP_BIOMASS,2,NNBIOMASS-2,YRECFM)
302 IF (CRESPSL=='CNT') THEN
303 ALLOCATE(XLITTER (ILU,NNLITTER,NNLITTLEVS,NPATCH))
304 ALLOCATE(XSOILCARB (ILU,NNSOILCARB,NPATCH))
305 ALLOCATE(XLIGNIN_STRUC (ILU,NNLITTLEVS,NPATCH))
308 IF (CRESPSL=='CNT') THEN
310 XLITTER(:,:,:,:) = 0.
311 DO JNLITTER=1,NNLITTER
312 DO JNLITTLEVS=1,NNLITTLEVS
313 WRITE(YLVL,'(I1,A1,I1)') JNLITTER,'_',JNLITTLEVS
314 YRECFM='LITTER'//ADJUSTL(YLVL(:LEN_TRIM(YLVL)))
315 CALL READ_SURF_FIELD2D(HPROGRAM,ZWORK(:,:),YRECFM)
316 XLITTER(:,JNLITTER,JNLITTLEVS,:)=ZWORK
320 XSOILCARB(:,:,:) = 0.
322 CALL READ_SURF_FIELD3D(HPROGRAM,XSOILCARB,1,NNSOILCARB,YRECFM)
324 XLIGNIN_STRUC(:,:,:) = 0.
326 CALL READ_SURF_FIELD3D(HPROGRAM,XLIGNIN_STRUC,1,NNLITTLEVS,YRECFM)
332 IF (LHOOK) CALL DR_HOOK('READ_ISBA_N',1,ZHOOK_HANDLE)
334 !-------------------------------------------------------------------------------
336 END SUBROUTINE READ_ISBA_n