SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
read_isba_canopyn.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE read_isba_canopy_n (DTCO, ICP, I, U, &
7  hprogram)
8 ! #########################################
9 !
10 !!**** *READ_ISBA_CANOPY_n* - reads ISBA fields
11 !!
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !!** METHOD
17 !! ------
18 !!
19 !! EXTERNAL
20 !! --------
21 !!
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! V. Masson *Meteo France*
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 01/2003
37 !! E. Martin 01/2012 Add LSBL_COLD_START
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 !
44 !
45 !
47 USE modd_isba_canopy_n, ONLY : isba_canopy_t
48 USE modd_isba_n, ONLY : isba_t
49 USE modd_surf_atm_n, ONLY : surf_atm_t
50 !
51 USE modd_surf_par, ONLY : xundef
52 !
53 !
55 USE modi_canopy_grid
56 USE modi_get_type_dim_n
57 !
58 USE yomhook ,ONLY : lhook, dr_hook
59 USE parkind1 ,ONLY : jprb
60 !
61 IMPLICIT NONE
62 !
63 !* 0.1 Declarations of arguments
64 ! -------------------------
65 !
66 !
67 TYPE(data_cover_t), INTENT(INOUT) :: dtco
68 TYPE(isba_canopy_t), INTENT(INOUT) :: icp
69 TYPE(isba_t), INTENT(INOUT) :: i
70 TYPE(surf_atm_t), INTENT(INOUT) :: u
71 !
72  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
73 !
74 !
75 !* 0.2 Declarations of local variables
76 ! -------------------------------
77 !
78 !
79  CHARACTER(LEN=12) :: yrecfm ! Name of the article to be read
80  CHARACTER(LEN=3) :: yread
81 INTEGER :: jlayer ! loop counter on layers
82 INTEGER :: ilu ! 1D physical dimension
83 INTEGER :: iresp ! Error code after redding
84 INTEGER :: iversion, ibugfix ! surface version
85 REAL(KIND=JPRB) :: zhook_handle
86 !-------------------------------------------------------------------------------
87 !
88 !* 1D physical dimension
89 !
90 IF (lhook) CALL dr_hook('READ_ISBA_CANOPY_N',0,zhook_handle)
91 yrecfm='SIZE_NATURE'
92  CALL get_type_dim_n(dtco, u, &
93  'NATURE',ilu)
94 !
95 !
96 !* flag to use or not canopy levels
97 !
98 yrecfm='VERSION'
99  CALL read_surf(&
100  hprogram,yrecfm,iversion,iresp)
101 !
102 yrecfm='BUG'
103  CALL read_surf(&
104  hprogram,yrecfm,ibugfix,iresp)
105 !
106 IF (iversion<3) THEN
107  i%LCANOPY = .false.
108 ELSE
109  yrecfm='ISBA_CANOPY'
110  CALL read_surf(&
111  hprogram,yrecfm,i%LCANOPY,iresp)
112 END IF
113 !
114 IF (.NOT.i%LCANOPY) THEN
115  ALLOCATE(icp%XZ (0,0))
116  ALLOCATE(icp%XU (0,0))
117  ALLOCATE(icp%XT (0,0))
118  ALLOCATE(icp%XQ (0,0))
119  ALLOCATE(icp%XTKE(0,0))
120  ALLOCATE(icp%XLMO(0) )
121  ALLOCATE(icp%XP (0,0))
122  ALLOCATE(icp%XDZ (0,0))
123  ALLOCATE(icp%XZF (0,0))
124  ALLOCATE(icp%XDZF(0,0))
125  IF (lhook) CALL dr_hook('READ_ISBA_CANOPY_N',1,zhook_handle)
126  RETURN
127 ENDIF
128 !
129 !* number of vertical levels
130 !
131 yrecfm='ISBA_CAN_LVL'
132  CALL read_surf(&
133  hprogram,yrecfm,icp%NLVL,iresp)
134 !
135 !* 2. Prognostic fields:
136 ! -----------------
137 !
138 !* altitudes
139 !
140 ALLOCATE(icp%XZ(ilu,icp%NLVL))
141 !
142 DO jlayer=1,icp%NLVL
143  WRITE(yrecfm,'(A10,I2.2)') 'ISBA_CAN_Z',jlayer
144  CALL read_surf(&
145  hprogram,yrecfm,icp%XZ(:,jlayer),iresp)
146 END DO
147 !
148 ALLOCATE(icp%XU (ilu,icp%NLVL))
149 ALLOCATE(icp%XT (ilu,icp%NLVL))
150 ALLOCATE(icp%XQ (ilu,icp%NLVL))
151 ALLOCATE(icp%XTKE(ilu,icp%NLVL))
152 ALLOCATE(icp%XLMO(ilu) )
153 ALLOCATE(icp%XP (ilu,icp%NLVL))
154 !
155 IF (iversion>7 .OR. iversion==7 .AND.ibugfix>=2) THEN
156  yrecfm='STORAGETYPE'
157  CALL read_surf(&
158  hprogram,yrecfm,yread,iresp)
159 ELSE
160  yread = 'ALL'
161 ENDIF
162 !
163 IF(yread=='ALL') THEN
164  !
165  !* wind in SBL
166  DO jlayer=1,icp%NLVL
167  WRITE(yrecfm,'(A10,I2.2)') 'ISBA_CAN_U',jlayer
168  CALL read_surf(&
169  hprogram,yrecfm,icp%XU(:,jlayer),iresp)
170  END DO
171  !
172  !* theta in SBL
173  DO jlayer=1,icp%NLVL
174  WRITE(yrecfm,'(A10,I2.2)') 'ISBA_CAN_T',jlayer
175  CALL read_surf(&
176  hprogram,yrecfm,icp%XT(:,jlayer),iresp)
177  END DO
178  !
179  !* humidity in SBL
180  DO jlayer=1,icp%NLVL
181  WRITE(yrecfm,'(A10,I2.2)') 'ISBA_CAN_Q',jlayer
182  CALL read_surf(&
183  hprogram,yrecfm,icp%XQ(:,jlayer),iresp)
184  END DO
185  !
186  !* Tke in SBL
187  DO jlayer=1,icp%NLVL
188  WRITE(yrecfm,'(A10,I2.2)') 'ISBA_CAN_E',jlayer
189  CALL read_surf(&
190  hprogram,yrecfm,icp%XTKE(:,jlayer),iresp)
191  END DO
192  !
193  !* Monin-Obhukov length
194  yrecfm='ISBA_CAN_LMO '
195  CALL read_surf(&
196  hprogram,yrecfm,icp%XLMO(:),iresp)
197  !
198  !* Pressure
199  DO jlayer=1,icp%NLVL
200  WRITE(yrecfm,'(A10,I2.2)') 'ISBA_CAN_P',jlayer
201  CALL read_surf(&
202  hprogram,yrecfm,icp%XP(:,jlayer),iresp)
203  END DO
204  !
205 ELSE
206  icp%XU (:,:) = xundef
207  icp%XT (:,:) = xundef
208  icp%XQ (:,:) = xundef
209  icp%XTKE(:,:) = xundef
210  icp%XLMO(:) = xundef
211  icp%XP (:,:) = xundef
212 ENDIF
213 !
214 !
215 !* Grid characteristics
216 !
217 !
218 ! --------------------------------- XZ(k+1) XDZ(k+1)
219 ! ^
220 ! |
221 ! |
222 ! - - - - - - - - - - - - - - - - - XZf(k+1) | XDZf(k+1)
223 ! ^ |
224 ! | |
225 ! --------------------------------- XZ(k), XU, XT, XQ, XTKE | XDZ(k) V
226 ! | ^
227 ! - - - - - - - - - - - - - - - - - XZf(k) V | XDZf(k)
228 ! --------------------------------- XZ(k-1) XDZ(k-1) V
229 ! - - - - - - - - - - - - - - - - - XZf(k-1)
230 !
231 ALLOCATE(icp%XDZ (ilu,icp%NLVL))
232 ALLOCATE(icp%XZF (ilu,icp%NLVL))
233 ALLOCATE(icp%XDZF(ilu,icp%NLVL))
234  CALL canopy_grid(ilu,icp%NLVL,icp%XZ,icp%XZF,icp%XDZ,icp%XDZF)
235 !
236 IF (lhook) CALL dr_hook('READ_ISBA_CANOPY_N',1,zhook_handle)
237 !
238 !-------------------------------------------------------------------------------
239 !
240 END SUBROUTINE read_isba_canopy_n
subroutine get_type_dim_n(DTCO, U, HTYPE, KDIM)
subroutine canopy_grid(KI, KLVL, PZ, PZF, PDZ, PDZF)
Definition: canopy_grid.F90:6
subroutine read_isba_canopy_n(DTCO, ICP, I, U, HPROGRAM)