SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
read_watflux_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_watflux_sbl_n (DTCO, U, W, WSB, &
7  hprogram)
8 ! #########################################
9 !
10 !!**** *READ_WATFLUX_SBL_n* - reads WATFLUX 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_surf_atm_n, ONLY : surf_atm_t
48 USE modd_watflux_n, ONLY : watflux_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(surf_atm_t), INTENT(INOUT) :: u
68 TYPE(watflux_t), INTENT(INOUT) :: w
69 TYPE(watflux_sbl_t), INTENT(INOUT) :: wsb
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 :: jlayer ! loop counter on layers
80 INTEGER :: ilu ! 1D physical dimension
81 INTEGER :: iresp ! Error code after redding
82 INTEGER :: iversion, ibugfix ! surface version
83 REAL(KIND=JPRB) :: zhook_handle
84 !-------------------------------------------------------------------------------
85 !
86 !* 1D physical dimension
87 !
88 IF (lhook) CALL dr_hook('READ_WATFLUX_SBL_N',0,zhook_handle)
89  CALL get_type_dim_n(dtco, u, &
90  'WATER ',ilu)
91 !
92 !* flag to use or not SBL levels
93 !
94 yrecfm='VERSION'
95  CALL read_surf(&
96  hprogram,yrecfm,iversion,iresp)
97 !
98 yrecfm='BUG'
99  CALL read_surf(&
100  hprogram,yrecfm,ibugfix,iresp)
101 !
102 yrecfm='WAT_SBL'
103  CALL read_surf(&
104  hprogram,yrecfm,w%LSBL,iresp)
105 !
106 IF (.NOT.w%LSBL) THEN
107  ALLOCATE(wsb%XZ (0,0))
108  ALLOCATE(wsb%XU (0,0))
109  ALLOCATE(wsb%XT (0,0))
110  ALLOCATE(wsb%XQ (0,0))
111  ALLOCATE(wsb%XTKE(0,0))
112  ALLOCATE(wsb%XLMO(0) )
113  ALLOCATE(wsb%XP (0,0))
114  ALLOCATE(wsb%XDZ (0,0))
115  ALLOCATE(wsb%XZF (0,0))
116  ALLOCATE(wsb%XDZF(0,0))
117  IF (lhook) CALL dr_hook('READ_WATFLUX_SBL_N',1,zhook_handle)
118  RETURN
119 ENDIF
120 !
121 !* number of vertical levels
122 !
123 yrecfm='WAT_SBL_LVL'
124  CALL read_surf(&
125  hprogram,yrecfm,wsb%NLVL,iresp)
126 !
127 !* 2. Prognostic fields:
128 ! -----------------
129 !
130 !* altitudes
131 !
132 ALLOCATE(wsb%XZ(ilu,wsb%NLVL))
133 !
134 DO jlayer=1,wsb%NLVL
135  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_Z',jlayer,' '
136  CALL read_surf(&
137  hprogram,yrecfm,wsb%XZ(:,jlayer),iresp)
138 END DO
139 !
140 ALLOCATE(wsb%XU (ilu,wsb%NLVL))
141 ALLOCATE(wsb%XT (ilu,wsb%NLVL))
142 ALLOCATE(wsb%XQ (ilu,wsb%NLVL))
143 ALLOCATE(wsb%XTKE(ilu,wsb%NLVL))
144 ALLOCATE(wsb%XLMO(ilu) )
145 ALLOCATE(wsb%XP (ilu,wsb%NLVL))
146 !
147 IF (iversion>7 .OR. iversion==7 .AND.ibugfix>=2) THEN
148  yrecfm='STORAGETYPE'
149  CALL read_surf(&
150  hprogram,yrecfm,yread,iresp)
151 ELSE
152  yread = 'ALL'
153 ENDIF
154 !
155 IF(yread=='ALL') THEN
156  !
157  !* wind in SBL
158  DO jlayer=1,wsb%NLVL
159  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_U',jlayer,' '
160  CALL read_surf(&
161  hprogram,yrecfm,wsb%XU(:,jlayer),iresp)
162  END DO
163  !
164  !* theta in SBL
165  DO jlayer=1,wsb%NLVL
166  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_T',jlayer,' '
167  CALL read_surf(&
168  hprogram,yrecfm,wsb%XT(:,jlayer),iresp)
169  END DO
170  !
171  !* humidity in SBL
172  DO jlayer=1,wsb%NLVL
173  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_Q',jlayer,' '
174  CALL read_surf(&
175  hprogram,yrecfm,wsb%XQ(:,jlayer),iresp)
176  END DO
177  !
178  !* Tke in SBL
179  DO jlayer=1,wsb%NLVL
180  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_E',jlayer,' '
181  CALL read_surf(&
182  hprogram,yrecfm,wsb%XTKE(:,jlayer),iresp)
183  END DO
184  !
185  !* Monin-Obhukov length
186  yrecfm='WAT_SBL_LMO '
187  CALL read_surf(&
188  hprogram,yrecfm,wsb%XLMO(:),iresp)
189  !
190  !* Pressure
191  DO jlayer=1,wsb%NLVL
192  WRITE(yrecfm,'(A9,I2.2,A1)') 'WAT_SBL_P',jlayer,' '
193  CALL read_surf(&
194  hprogram,yrecfm,wsb%XP(:,jlayer),iresp)
195  END DO
196  !
197 ELSE
198  wsb%XU (:,:) = xundef
199  wsb%XT (:,:) = xundef
200  wsb%XQ (:,:) = xundef
201  wsb%XTKE(:,:) = xundef
202  wsb%XLMO(:) = xundef
203  wsb%XP (:,:) = xundef
204 ENDIF
205 !
206 !
207 !* Grid characteristics
208 !
209 !
210 ! --------------------------------- XZ(k+1) XDZ(k+1)
211 ! ^
212 ! |
213 ! |
214 ! - - - - - - - - - - - - - - - - - XZf(k+1) | XDZf(k+1)
215 ! ^ |
216 ! | |
217 ! --------------------------------- XZ(k), XU, XT, XQ, XTKE | XDZ(k) V
218 ! | ^
219 ! - - - - - - - - - - - - - - - - - XZf(k) V | XDZf(k)
220 ! --------------------------------- XZ(k-1) XDZ(k-1) V
221 ! - - - - - - - - - - - - - - - - - XZf(k-1)
222 !
223 ALLOCATE(wsb%XDZ (ilu,wsb%NLVL))
224 ALLOCATE(wsb%XZF (ilu,wsb%NLVL))
225 ALLOCATE(wsb%XDZF(ilu,wsb%NLVL))
226  CALL canopy_grid(ilu,wsb%NLVL,wsb%XZ,wsb%XZF,wsb%XDZ,wsb%XDZF)
227 !
228 IF (lhook) CALL dr_hook('READ_WATFLUX_SBL_N',1,zhook_handle)
229 !
230 !-------------------------------------------------------------------------------
231 !
232 END SUBROUTINE read_watflux_sbl_n
subroutine get_type_dim_n(DTCO, U, HTYPE, KDIM)
subroutine read_watflux_sbl_n(DTCO, U, W, WSB, HPROGRAM)
subroutine canopy_grid(KI, KLVL, PZ, PZF, PDZ, PDZF)
Definition: canopy_grid.F90:6