SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
read_flake_sbln.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_flake_sbl_n (DTCO, U, F, FSB, &
7  hprogram)
8 ! #########################################
9 !
10 !!**** *READ_FLAKE_SBL_n* - reads FLAKE 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_flake_n, ONLY : flake_t
48 USE modd_flake_sbl_n, ONLY : flake_sbl_t
49 USE modd_surf_atm_n, ONLY : surf_atm_t
50 !
51 USE modd_surf_par, ONLY : xundef
52 !
54 USE modi_canopy_grid
55 USE modi_get_type_dim_n
56 !
57 USE yomhook ,ONLY : lhook, dr_hook
58 USE parkind1 ,ONLY : jprb
59 !
60 IMPLICIT NONE
61 !
62 !* 0.1 Declarations of arguments
63 ! -------------------------
64 !
65 !
66 TYPE(data_cover_t), INTENT(INOUT) :: dtco
67 TYPE(flake_t), INTENT(INOUT) :: f
68 TYPE(flake_sbl_t), INTENT(INOUT) :: fsb
69 TYPE(surf_atm_t), INTENT(INOUT) :: u
70 !
71  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! calling program
72 !
73 !
74 !* 0.2 Declarations of local variables
75 ! -------------------------------
76 !
77  CHARACTER(LEN=12) :: yrecfm ! Name of the article to be read
78  CHARACTER(LEN=3) :: yread
79 INTEGER :: ilu ! 1D physical dimension
80 INTEGER :: iresp ! Error code after redding
81 INTEGER :: jlayer ! loop counter on layers
82 INTEGER :: iversion, ibugfix
83 REAL(KIND=JPRB) :: zhook_handle
84 !
85 !-------------------------------------------------------------------------------
86 !
87 !* 1D physical dimension
88 !
89 IF (lhook) CALL dr_hook('READ_FLAKE_SBL_N',0,zhook_handle)
90  CALL get_type_dim_n(dtco, u, &
91  'WATER ',ilu)
92 !
93 yrecfm='VERSION'
94  CALL read_surf(&
95  hprogram,yrecfm,iversion,iresp)
96 !
97 yrecfm='BUG'
98  CALL read_surf(&
99  hprogram,yrecfm,ibugfix,iresp)
100 !
101 !* flag to use or not SBL levels
102 !
103 yrecfm='WAT_SBL'
104  CALL read_surf(&
105  hprogram,yrecfm,f%LSBL,iresp)
106 !
107 IF (.NOT.f%LSBL) THEN
108  ALLOCATE(fsb%XZ (0,0))
109  ALLOCATE(fsb%XU (0,0))
110  ALLOCATE(fsb%XT (0,0))
111  ALLOCATE(fsb%XQ (0,0))
112  ALLOCATE(fsb%XTKE(0,0))
113  ALLOCATE(fsb%XLMO(0) )
114  ALLOCATE(fsb%XP (0,0))
115  ALLOCATE(fsb%XDZ (0,0))
116  ALLOCATE(fsb%XZF (0,0))
117  ALLOCATE(fsb%XDZF(0,0))
118  IF (lhook) CALL dr_hook('READ_SEAFLUX_SBL_N',1,zhook_handle)
119  RETURN
120 ENDIF
121 !
122 !* number of vertical levels
123 !
124 yrecfm='WAT_SBL_LVL'
125  CALL read_surf(&
126  hprogram,yrecfm,fsb%NLVL,iresp)
127 !
128 !* 2. Prognostic fields:
129 ! -----------------
130 !
131 !* altitudes
132 !
133 ALLOCATE(fsb%XZ(ilu,fsb%NLVL))
134 !
135 DO jlayer=1,fsb%NLVL
136  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_Z',jlayer,' '
137  CALL read_surf(&
138  hprogram,yrecfm,fsb%XZ(:,jlayer),iresp)
139 END DO
140 !
141 ALLOCATE(fsb%XU (ilu,fsb%NLVL))
142 ALLOCATE(fsb%XT (ilu,fsb%NLVL))
143 ALLOCATE(fsb%XQ (ilu,fsb%NLVL))
144 ALLOCATE(fsb%XTKE(ilu,fsb%NLVL))
145 ALLOCATE(fsb%XLMO(ilu) )
146 ALLOCATE(fsb%XP (ilu,fsb%NLVL))
147 !
148 IF (iversion>7 .OR. iversion==7 .AND.ibugfix>=2) THEN
149  yrecfm='STORAGETYPE'
150  CALL read_surf(&
151  hprogram,yrecfm,yread,iresp)
152 ELSE
153  yread = 'ALL'
154 ENDIF
155 !
156 IF(yread=='ALL') THEN
157  !
158  !* wind in SBL
159  DO jlayer=1,fsb%NLVL
160  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_U',jlayer,' '
161  CALL read_surf(&
162  hprogram,yrecfm,fsb%XU(:,jlayer),iresp)
163  END DO
164  !
165  !* theta in SBL
166  DO jlayer=1,fsb%NLVL
167  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_T',jlayer,' '
168  CALL read_surf(&
169  hprogram,yrecfm,fsb%XT(:,jlayer),iresp)
170  END DO
171  !
172  !* humidity in SBL
173  DO jlayer=1,fsb%NLVL
174  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_Q',jlayer,' '
175  CALL read_surf(&
176  hprogram,yrecfm,fsb%XQ(:,jlayer),iresp)
177  END DO
178  !
179  !* Tke in SBL
180  DO jlayer=1,fsb%NLVL
181  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_E',jlayer,' '
182  CALL read_surf(&
183  hprogram,yrecfm,fsb%XTKE(:,jlayer),iresp)
184  END DO
185  !
186  !* Monin-Obhukov length
187  yrecfm='WAT_SBL_LMO '
188  CALL read_surf(&
189  hprogram,yrecfm,fsb%XLMO(:),iresp)
190  !
191  !* Pressure
192  DO jlayer=1,fsb%NLVL
193  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_P',jlayer,' '
194  CALL read_surf(&
195  hprogram,yrecfm,fsb%XP(:,jlayer),iresp)
196  END DO
197  !
198 ELSE
199  fsb%XU (:,:) = xundef
200  fsb%XT (:,:) = xundef
201  fsb%XQ (:,:) = xundef
202  fsb%XTKE(:,:) = xundef
203  fsb%XLMO(:) = xundef
204  fsb%XP (:,:) = xundef
205 ENDIF
206 !
207 !
208 !* Grid characteristics
209 !
210 !
211 ! --------------------------------- XZ(k+1) XDZ(k+1)
212 ! ^
213 ! |
214 ! |
215 ! - - - - - - - - - - - - - - - - - XZf(k+1) | XDZf(k+1)
216 ! ^ |
217 ! | |
218 ! --------------------------------- XZ(k), XU, XT, XQ, XTKE | XDZ(k) V
219 ! | ^
220 ! - - - - - - - - - - - - - - - - - XZf(k) V | XDZf(k)
221 ! --------------------------------- XZ(k-1) XDZ(k-1) V
222 ! - - - - - - - - - - - - - - - - - XZf(k-1)
223 !
224 ALLOCATE(fsb%XDZ (ilu,fsb%NLVL))
225 ALLOCATE(fsb%XZF (ilu,fsb%NLVL))
226 ALLOCATE(fsb%XDZF(ilu,fsb%NLVL))
227  CALL canopy_grid(ilu,fsb%NLVL,fsb%XZ,fsb%XZF,fsb%XDZ,fsb%XDZF)
228 !
229 IF (lhook) CALL dr_hook('READ_FLAKE_SBL_N',1,zhook_handle)
230 !
231 !-------------------------------------------------------------------------------
232 !
233 END SUBROUTINE read_flake_sbl_n
subroutine get_type_dim_n(DTCO, U, HTYPE, KDIM)
subroutine read_flake_sbl_n(DTCO, U, F, FSB, HPROGRAM)
subroutine canopy_grid(KI, KLVL, PZ, PZF, PDZ, PDZF)
Definition: canopy_grid.F90:6