SURFEX v8.1
General documentation of Surfex
init_watfluxn.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 init_watflux_n (DTCO, OREAD_BUDGETC, UG, U, WM, &
7  HPROGRAM,HINIT, &
8  KI,KSV,KSW, &
9  HSV,PCO2,PRHOA, &
10  PZENITH,PAZIM,PSW_BANDS,PDIR_ALB,PSCA_ALB, &
11  PEMIS,PTSRAD,PTSURF, &
12  KYEAR, KMONTH,KDAY, PTIME, &
13  HATMFILE,HATMFILETYPE, &
14  HTEST )
15 ! #############################################################
16 !
17 !!**** *INIT_WATFLUX_n* - routine to initialize WATFLUX
18 !!
19 !! PURPOSE
20 !! -------
21 !!
22 !!** METHOD
23 !! ------
24 !!
25 !! EXTERNAL
26 !! --------
27 !!
28 !!
29 !! IMPLICIT ARGUMENTS
30 !! ------------------
31 !!
32 !! REFERENCE
33 !! ---------
34 !!
35 !!
36 !! AUTHOR
37 !! ------
38 !! V. Masson *Meteo France*
39 !!
40 !! MODIFICATIONS
41 !! -------------
42 !! Original 01/2003
43 !! B. Decharme 08/2009 : specific treatment for water/ice in the Earth System Model
44 !! B. Decharme 07/2011 : read pgd+prep
45 !! B.Decharme 04/2013 new coupling variables
46 !-------------------------------------------------------------------------------
47 !
48 !* 0. DECLARATIONS
49 ! ------------
50 !
52 !
55 USE modd_surf_atm_n, ONLY : surf_atm_t
56 !
57 USE modd_read_namelist, ONLY : lnam_read
59 !
60 USE modd_csts, ONLY : xtt
64 USE modd_surf_par, ONLY : xundef, nundef
65 !
66 USE modi_init_io_surf_n
67 USE modi_default_ch_dep
68 USE modi_default_watflux
69 USE modi_default_diag_watflux
70 USE modi_read_default_watflux_n
71 USE modi_read_watflux_conf_n
72 USE modi_read_watflux_n
73 USE modi_read_pgd_watflux_n
74 USE modi_diag_watflux_init_n
75 USE modi_end_io_surf_n
76 USE modi_get_luout
78 USE modi_read_watflux_date
79 USE modi_read_nam_prep_watflux_n
80 USE modi_init_chemical_n
81 USE modi_prep_ctrl
82 USE modi_update_rad_water
83 !
84 USE modi_read_sbl_n
85 USE modi_set_surfex_filein
86 !
87 USE yomhook ,ONLY : lhook, dr_hook
88 USE parkind1 ,ONLY : jprb
89 !
90 USE modi_abor1_sfx
91 !
92 IMPLICIT NONE
93 !
94 !* 0.1 Declarations of arguments
95 ! -------------------------
96 !
97 !
98 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
99 LOGICAL, INTENT(IN) :: OREAD_BUDGETC
100 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
101 TYPE(surf_atm_t), INTENT(INOUT) :: U
102 TYPE(watflux_model_t), INTENT(INOUT) :: WM
103 !
104  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
105  CHARACTER(LEN=3), INTENT(IN) :: HINIT ! choice of fields to initialize
106 INTEGER, INTENT(IN) :: KI ! number of points
107 INTEGER, INTENT(IN) :: KSV ! number of scalars
108 INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
109  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: HSV ! name of all scalar variables
110 REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration (kg/m3)
111 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density
112 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! solar zenithal angle
113 REAL, DIMENSION(KI), INTENT(IN) :: PAZIM ! solar azimuthal angle (rad from N, clock)
114 REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! middle wavelength of each band
115 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB ! direct albedo for each band
116 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each band
117 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity
118 REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! radiative temperature
119 REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface effective temperature (K)
120 INTEGER, INTENT(IN) :: KYEAR ! current year (UTC)
121 INTEGER, INTENT(IN) :: KMONTH ! current month (UTC)
122 INTEGER, INTENT(IN) :: KDAY ! current day (UTC)
123 REAL, INTENT(IN) :: PTIME ! current time since
124  ! midnight (UTC, s)
125 !
126  CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! atmospheric file name
127  CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! atmospheric file type
128  CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK'
129 
130 !
131 !
132 !* 0.2 Declarations of local variables
133 ! -------------------------------
134 !
135 INTEGER :: ILU ! sizes of WATFLUX arrays
136 INTEGER :: ILUOUT ! unit of output listing file
137 INTEGER :: IRESP ! return code
138 REAL(KIND=JPRB) :: ZHOOK_HANDLE
139 !
140 !-------------------------------------------------------------------------------
141 !
142 ! Initialisation for IO
143 !
144 IF (lhook) CALL dr_hook('INIT_WATFLUX_N',0,zhook_handle)
145 !
146  CALL get_luout(hprogram,iluout)
147 !
148 IF (htest/='OK') THEN
149  CALL abor1_sfx('INIT_WATFLUXN: FATAL ERROR DURING ARGUMENT TRANSFER')
150 END IF
151 !
152 ! Other little things
153 !
154 pdir_alb = xundef
155 psca_alb = xundef
156 pemis = xundef
157 ptsrad = xundef
158 ptsurf = xundef
159 !
160 IF (lnam_read) THEN
161  !
162  !
163  !* 0. Defaults
164  ! --------
165  !
166  ! 0.1. Hard defaults
167  !
168  CALL default_watflux(wm%W%XTSTEP,wm%W%XOUT_TSTEP,wm%W%CWAT_ALB,wm%W%CINTERPOL_TS)
169  CALL default_ch_dep(wm%CHW%CCH_DRY_DEP)
170  CALL default_diag_watflux(wm%DWO%N2M,wm%DWO%LSURF_BUDGET,wm%DWO%L2M_MIN_ZS,wm%DWO%LRAD_BUDGET,&
171  wm%DWO%LCOEF,wm%DWO%LSURF_VARS, &
172  wm%DWO%LSURF_BUDGETC,wm%DWO%LRESET_BUDGETC,wm%DWO%XDIAG_TSTEP )
173  !
174 ENDIF
175 !
176 ! 0.2. Defaults from file header
177 !
178  CALL read_default_watflux_n(wm%CHW, wm%DWO, wm%W, hprogram)
179 !
180 !* 1.1 Reading of configuration:
181 ! -------------------------
182 !
183 !
184  CALL read_watflux_conf_n(wm%CHW, wm%DWO, wm%W, hprogram)
185 !
186 wm%W%LINTERPOL_TS=.false.
187 IF(lcpl_sea)THEN
188 ! No TS water interpolation in Earth System Model
189  wm%W%CINTERPOL_TS='NONE '
190  wm%W%LINTERPOL_TS=.false.
191 ELSEIF(wm%W%CINTERPOL_TS/='NONE ')THEN
192  wm%W%LINTERPOL_TS=.true.
193 ENDIF
194 !
195 !-------------------------------------------------------------------------------
196 !
197 !* 1. Cover fields and grid:
198 ! ---------------------
199 !* date
200 !
201 SELECT CASE (hinit)
202  CASE ('PGD')
203  wm%W%TTIME%TDATE%YEAR = nundef
204  wm%W%TTIME%TDATE%MONTH= nundef
205  wm%W%TTIME%TDATE%DAY = nundef
206  wm%W%TTIME%TIME = xundef
207 
208  CASE ('PRE')
209  CALL prep_ctrl(wm%DWO,iluout )
210  IF (lnam_read) CALL read_nam_prep_watflux_n(hprogram)
211  CALL read_watflux_date(hprogram,hinit,iluout,hatmfile,hatmfiletype,kyear,kmonth,kday,ptime,wm%W%TTIME)
212 
213  CASE DEFAULT
214  CALL init_io_surf_n(dtco, u, hprogram,'FULL ','SURF ','READ ')
215  CALL read_surf(hprogram,'DTCUR',wm%W%TTIME,iresp)
216  CALL end_io_surf_n(hprogram)
217 END SELECT
218 !
219 !-----------------------------------------------------------------------------------------------------
220 ! READ PGD FILE
221 !-----------------------------------------------------------------------------------------------------
222 !
223 ! 1.3. Schemes used
224 !
225 ! Initialisation for IO
226 !
227  CALL set_surfex_filein(hprogram,'PGD ') ! change input file name to pgd name
228  CALL init_io_surf_n(dtco, u, hprogram,'WATER ','WATFLX','READ ')
229 !
230 ! Reading of the fields
231 !
232  CALL read_pgd_watflux_n(dtco, u, ug, wm%G, wm%W, hprogram)
233 !
234 !-------------------------------------------------------------------------------
235 !
236 !* if only physiographic fields are to be initialized, stop here.
237 !
238 ! End of IO
239 !
240  CALL end_io_surf_n(hprogram)
241  CALL set_surfex_filein(hprogram,'PREP') ! restore input file name
242 !
243 !-----------------------------------------------------------------------------------------------------
244 ! END READ PGD FILE
245 !-----------------------------------------------------------------------------------------------------
246 !
247 IF (hinit/='ALL' .AND. hinit/='SOD') THEN
248  IF (lhook) CALL dr_hook('INIT_WATFLUX_N',1,zhook_handle)
249  RETURN
250 END IF
251 !
252 !-------------------------------------------------------------------------------
253 !
254 ! Initialisation for IO
255 !
256  CALL init_io_surf_n(dtco, u, hprogram,'WATER ','WATFLX','READ ')
257 !
258 !
259 !* 2. Prognostic and cover fields:
260 ! ---------------------------
261 !
262  CALL read_watflux_n(dtco, u, wm%W, hprogram)
263 !
264 IF (hinit/='ALL') THEN
265  CALL end_io_surf_n(hprogram)
266  IF (lhook) CALL dr_hook('INIT_WATFLUX_N',1,zhook_handle)
267  RETURN
268 END IF
269 !
270 ilu = SIZE(wm%W%XCOVER,1)
271 !
272 !
273 !* 3. Specific fields when using earth system model (Ice temperature)
274 ! ---------------------------------------------------------------
275 !
276 IF(lcpl_seaice)THEN
277  ALLOCATE(wm%W%XTICE (ilu))
278  ALLOCATE(wm%W%XICE_ALB(ilu))
279  wm%W%XTICE (:)=xundef
280  wm%W%XICE_ALB(:)=xundef
281 ELSE
282  ALLOCATE(wm%W%XTICE (0))
283  ALLOCATE(wm%W%XICE_ALB(0))
284 ENDIF
285 !
286 !* 4. Albedo, emissivity and temperature fields on open water and ice
287 ! ---------------------------------------------------------------
288 !
289 ALLOCATE(wm%W%XDIR_ALB (ilu))
290 ALLOCATE(wm%W%XSCA_ALB (ilu))
291 ALLOCATE(wm%W%XEMIS (ilu))
292 wm%W%XDIR_ALB = 0.0
293 wm%W%XSCA_ALB = 0.0
294 wm%W%XEMIS = 0.0
295 !
296  CALL update_rad_water(wm%W,pzenith,xtt,pdir_alb,psca_alb,pemis,ptsrad )
297 !
298 ptsurf(:) = wm%W%XTS(:)
299 !
300 !-------------------------------------------------------------------------------
301 !
302 !* 5. SBL air fields:
303 ! --------------
304 !
305  CALL read_sbl_n(dtco, u, wm%SB, wm%W%LSBL, hprogram, "WATER ")
306 !
307 !-------------------------------------------------------------------------------
308 !
309 !* 6. Chemistry / dust
310 ! ----------------
311 !
312  CALL init_chemical_n(iluout, ksv, hsv, wm%CHW%SVW, &
313  wm%CHW%CCH_NAMES, wm%CHW%CAER_NAMES, &
314  hdstnames=wm%CHW%CDSTNAMES, hsltnames=wm%CHW%CSLTNAMES )
315 !
316 !* depositiion scheme
317 !
318 
319 IF (wm%CHW%SVW%NBEQ>0 .AND. wm%CHW%CCH_DRY_DEP=='WES89') THEN
320  ALLOCATE(wm%CHW%XDEP(ilu,wm%CHW%SVW%NBEQ))
321 ELSE
322  ALLOCATE(wm%CHW%XDEP(0,0))
323 END IF
324 !
325 !-------------------------------------------------------------------------------
326 !
327 !* 7. diagnostics initialization
328 ! --------------------------
329 !
330  CALL diag_watflux_init_n(oread_budgetc, wm%DWO, wm%DW, wm%DWC, wm%W, &
331  hprogram,ilu,ksw)
332 !
333 !-------------------------------------------------------------------------------
334 !
335 ! End of IO
336 !
337  CALL end_io_surf_n(hprogram)
338 IF (lhook) CALL dr_hook('INIT_WATFLUX_N',1,zhook_handle)
339 !
340 END SUBROUTINE init_watflux_n
subroutine init_watflux_n(DTCO, OREAD_BUDGETC, UG, U, WM, HPROGRAM, HINIT,
subroutine init_chemical_n(KLUOUT, KSV, HSV, SV, HCH_NAMES, HAER_NAMES, HDSTNAMES, HSLTNAMES)
subroutine read_watflux_date(HPROGRAM, HINIT, KLUOUT, HATMFILE, HATMF
integer ndst_mdebeg
logical lvarsig_dst
subroutine set_surfex_filein(HPROGRAM, HMASK)
subroutine default_watflux(PTSTEP, POUT_TSTEP, HWAT_ALB, HINTERPOL_TS
subroutine read_watflux_conf_n(CHW, DGO, W, HPROGRAM)
subroutine default_diag_watflux(K2M, OSURF_BUDGET, O2M_MIN_ZS, ORAD_B
subroutine read_pgd_watflux_n(DTCO, U, UG, WG, W, HPROGRAM)
subroutine update_rad_water(W, PZENITH, PTT, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD)
subroutine prep_ctrl(DGO, KLUOUT)
Definition: prep_ctrl.F90:7
subroutine read_sbl_n(DTCO, U, SB, OSBL, HPROGRAM, HSURF)
Definition: read_sbln.F90:7
subroutine read_watflux_n(DTCO, U, W, HPROGRAM)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
logical lrgfix_dst
integer, parameter jprb
Definition: parkind1.F90:32
subroutine read_nam_prep_watflux_n(HPROGRAM)
logical lvarsig_slt
integer, parameter nundef
subroutine read_default_watflux_n(CHW, DGO, W, HPROGRAM)
subroutine default_ch_dep(HCH_DRY_DEP)
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:7
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
logical lhook
Definition: yomhook.F90:15
real, save xtt
Definition: modd_csts.F90:66
subroutine diag_watflux_init_n(OREAD_BUDGETC, DGO, D, DC, W, HPRO
integer nslt_mdebeg
logical lrgfix_slt
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION