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_CANOPY_n(HPROGRAM)
7 ! #########################################
9 !!**** *READ_ISBA_CANOPY_n* - reads ISBA fields
31 !! V. Masson *Meteo France*
36 !! E. Martin 01/2012 Add LSBL_COLD_START
37 !-------------------------------------------------------------------------------
42 USE MODD_SURF_PAR, ONLY : XUNDEF
44 USE MODD_ISBA_n, ONLY : LCANOPY
45 USE MODD_ISBA_CANOPY_n, ONLY : NLVL, XZ, XU, XT, XQ, XTKE, XLMO, XDZ, XZF, XDZF, XP
49 USE MODI_GET_TYPE_DIM_n
51 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
52 USE PARKIND1 ,ONLY : JPRB
56 !* 0.1 Declarations of arguments
57 ! -------------------------
59 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program
62 !* 0.2 Declarations of local variables
63 ! -------------------------------
66 CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read
67 CHARACTER(LEN=3) :: YREAD
68 INTEGER :: JLAYER ! loop counter on layers
69 INTEGER :: ILU ! 1D physical dimension
70 INTEGER :: IRESP ! Error code after redding
71 INTEGER :: IVERSION, IBUGFIX ! surface version
72 REAL(KIND=JPRB) :: ZHOOK_HANDLE
73 !-------------------------------------------------------------------------------
75 !* 1D physical dimension
77 IF (LHOOK) CALL DR_HOOK('READ_ISBA_CANOPY_N',0,ZHOOK_HANDLE)
79 CALL GET_TYPE_DIM_n('NATURE',ILU)
82 !* flag to use or not canopy levels
85 CALL READ_SURF(HPROGRAM,YRECFM,IVERSION,IRESP)
88 CALL READ_SURF(HPROGRAM,YRECFM,IBUGFIX,IRESP)
94 CALL READ_SURF(HPROGRAM,YRECFM,LCANOPY,IRESP)
97 IF (.NOT.LCANOPY) THEN
108 IF (LHOOK) CALL DR_HOOK('READ_ISBA_CANOPY_N',1,ZHOOK_HANDLE)
112 !* number of vertical levels
114 YRECFM='ISBA_CAN_LVL'
115 CALL READ_SURF(HPROGRAM,YRECFM,NLVL,IRESP)
117 !* 2. Prognostic fields:
122 ALLOCATE(XZ(ILU,NLVL))
125 WRITE(YRECFM,'(A10,I2.2)') 'ISBA_CAN_Z',JLAYER
126 CALL READ_SURF(HPROGRAM,YRECFM,XZ(:,JLAYER),IRESP)
129 ALLOCATE(XU (ILU,NLVL))
130 ALLOCATE(XT (ILU,NLVL))
131 ALLOCATE(XQ (ILU,NLVL))
132 ALLOCATE(XTKE(ILU,NLVL))
134 ALLOCATE(XP (ILU,NLVL))
136 IF (IVERSION>7 .OR. IVERSION==7 .AND.IBUGFIX>=2) THEN
138 CALL READ_SURF(HPROGRAM,YRECFM,YREAD,IRESP)
143 IF(YREAD=='ALL') THEN
147 WRITE(YRECFM,'(A10,I2.2)') 'ISBA_CAN_U',JLAYER
148 CALL READ_SURF(HPROGRAM,YRECFM,XU(:,JLAYER),IRESP)
153 WRITE(YRECFM,'(A10,I2.2)') 'ISBA_CAN_T',JLAYER
154 CALL READ_SURF(HPROGRAM,YRECFM,XT(:,JLAYER),IRESP)
159 WRITE(YRECFM,'(A10,I2.2)') 'ISBA_CAN_Q',JLAYER
160 CALL READ_SURF(HPROGRAM,YRECFM,XQ(:,JLAYER),IRESP)
165 WRITE(YRECFM,'(A10,I2.2)') 'ISBA_CAN_E',JLAYER
166 CALL READ_SURF(HPROGRAM,YRECFM,XTKE(:,JLAYER),IRESP)
169 !* Monin-Obhukov length
170 YRECFM='ISBA_CAN_LMO '
171 CALL READ_SURF(HPROGRAM,YRECFM,XLMO(:),IRESP)
175 WRITE(YRECFM,'(A10,I2.2)') 'ISBA_CAN_P',JLAYER
176 CALL READ_SURF(HPROGRAM,YRECFM,XP(:,JLAYER),IRESP)
189 !* Grid characteristics
192 ! --------------------------------- XZ(k+1) XDZ(k+1)
196 ! - - - - - - - - - - - - - - - - - XZf(k+1) | XDZf(k+1)
199 ! --------------------------------- XZ(k), XU, XT, XQ, XTKE | XDZ(k) V
201 ! - - - - - - - - - - - - - - - - - XZf(k) V | XDZf(k)
202 ! --------------------------------- XZ(k-1) XDZ(k-1) V
203 ! - - - - - - - - - - - - - - - - - XZf(k-1)
205 ALLOCATE(XDZ (ILU,NLVL))
206 ALLOCATE(XZF (ILU,NLVL))
207 ALLOCATE(XDZF(ILU,NLVL))
208 CALL CANOPY_GRID(ILU,NLVL,XZ,XZF,XDZ,XDZF)
210 IF (LHOOK) CALL DR_HOOK('READ_ISBA_CANOPY_N',1,ZHOOK_HANDLE)
212 !-------------------------------------------------------------------------------
214 END SUBROUTINE READ_ISBA_CANOPY_n