SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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, DGU, 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 !
56 USE modd_surf_atm_n, ONLY : surf_atm_t
57 !
58 USE modd_read_namelist, ONLY : lnam_read
59 USE modd_sfx_oasis, ONLY : lcpl_sea, lcpl_seaice
60 !
61 USE modd_csts, ONLY : xtt
62 USE modd_chs_aerosol, ONLY: lvarsigi, lvarsigj
63 USE modd_dst_surf, ONLY: lvarsig_dst, ndstmde, ndst_mdebeg, lrgfix_dst
64 USE modd_slt_surf, ONLY: lvarsig_slt, nsltmde, nslt_mdebeg, lrgfix_slt
65 USE modd_surf_par, ONLY : xundef, nundef
66 !
67 USE modi_init_io_surf_n
68 USE modi_default_ch_dep
69 USE modi_default_watflux
70 USE modi_default_diag_watflux
71 USE modi_read_default_watflux_n
72 USE modi_read_watflux_conf_n
73 USE modi_read_watflux_n
74 USE modi_read_pgd_watflux_n
75 USE modi_diag_watflux_init_n
76 USE modi_end_io_surf_n
77 USE modi_get_luout
79 USE modi_read_watflux_date
80 USE modi_read_nam_prep_watflux_n
81 USE modi_init_chemical_n
82 USE modi_prep_ctrl_watflux
83 USE modi_update_rad_water
84 !
85 USE modi_read_watflux_sbl_n
86 USE modi_set_surfex_filein
87 !
88 USE yomhook ,ONLY : lhook, dr_hook
89 USE parkind1 ,ONLY : jprb
90 !
91 USE modi_abor1_sfx
92 !
93 IMPLICIT NONE
94 !
95 !* 0.1 Declarations of arguments
96 ! -------------------------
97 !
98 !
99 TYPE(data_cover_t), INTENT(INOUT) :: dtco
100 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
101 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
102 TYPE(surf_atm_t), INTENT(INOUT) :: u
103 TYPE(watflux_model_t), INTENT(INOUT) :: wm
104 !
105  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
106  CHARACTER(LEN=3), INTENT(IN) :: hinit ! choice of fields to initialize
107 INTEGER, INTENT(IN) :: ki ! number of points
108 INTEGER, INTENT(IN) :: ksv ! number of scalars
109 INTEGER, INTENT(IN) :: ksw ! number of short-wave spectral bands
110  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: hsv ! name of all scalar variables
111 REAL, DIMENSION(KI), INTENT(IN) :: pco2 ! CO2 concentration (kg/m3)
112 REAL, DIMENSION(KI), INTENT(IN) :: prhoa ! air density
113 REAL, DIMENSION(KI), INTENT(IN) :: pzenith ! solar zenithal angle
114 REAL, DIMENSION(KI), INTENT(IN) :: pazim ! solar azimuthal angle (rad from N, clock)
115 REAL, DIMENSION(KSW), INTENT(IN) :: psw_bands ! middle wavelength of each band
116 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: pdir_alb ! direct albedo for each band
117 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: psca_alb ! diffuse albedo for each band
118 REAL, DIMENSION(KI), INTENT(OUT) :: pemis ! emissivity
119 REAL, DIMENSION(KI), INTENT(OUT) :: ptsrad ! radiative temperature
120 REAL, DIMENSION(KI), INTENT(OUT) :: ptsurf ! surface effective temperature (K)
121 INTEGER, INTENT(IN) :: kyear ! current year (UTC)
122 INTEGER, INTENT(IN) :: kmonth ! current month (UTC)
123 INTEGER, INTENT(IN) :: kday ! current day (UTC)
124 REAL, INTENT(IN) :: ptime ! current time since
125  ! midnight (UTC, s)
126 !
127  CHARACTER(LEN=28), INTENT(IN) :: hatmfile ! atmospheric file name
128  CHARACTER(LEN=6), INTENT(IN) :: hatmfiletype! atmospheric file type
129  CHARACTER(LEN=2), INTENT(IN) :: htest ! must be equal to 'OK'
130 
131 !
132 !
133 !* 0.2 Declarations of local variables
134 ! -------------------------------
135 !
136 INTEGER :: ilu ! sizes of WATFLUX arrays
137 INTEGER :: iluout ! unit of output listing file
138 INTEGER :: iresp ! return code
139 REAL(KIND=JPRB) :: zhook_handle
140 !
141 !-------------------------------------------------------------------------------
142 !
143 ! Initialisation for IO
144 !
145 IF (lhook) CALL dr_hook('INIT_WATFLUX_N',0,zhook_handle)
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%DGW%N2M,wm%DGW%LSURF_BUDGET,wm%DGW%L2M_MIN_ZS,wm%DGW%LRAD_BUDGET,&
171  wm%DGW%LCOEF,wm%DGW%LSURF_VARS, &
172  wm%DGW%LSURF_BUDGETC,wm%DGW%LRESET_BUDGETC,wm%DGW%XDIAG_TSTEP )
173  !
174 ENDIF
175 !
176 ! 0.2. Defaults from file header
177 !
178  CALL read_default_watflux_n(wm%CHW, wm%DGW, wm%W, &
179  hprogram)
180 !
181 !* 1.1 Reading of configuration:
182 ! -------------------------
183 !
184 !
185  CALL read_watflux_conf_n(wm%CHW, wm%DGW, wm%W, &
186  hprogram)
187 !
188 wm%W%LINTERPOL_TS=.false.
189 IF(lcpl_sea)THEN
190 ! No TS water interpolation in Earth System Model
191  wm%W%CINTERPOL_TS='NONE '
192  wm%W%LINTERPOL_TS=.false.
193 ELSEIF(wm%W%CINTERPOL_TS/='NONE ')THEN
194  wm%W%LINTERPOL_TS=.true.
195 ENDIF
196 !
197 !-------------------------------------------------------------------------------
198 !
199 !* 1. Cover fields and grid:
200 ! ---------------------
201 !* date
202 !
203 SELECT CASE (hinit)
204  CASE ('PGD')
205  wm%W%TTIME%TDATE%YEAR = nundef
206  wm%W%TTIME%TDATE%MONTH= nundef
207  wm%W%TTIME%TDATE%DAY = nundef
208  wm%W%TTIME%TIME = xundef
209 
210  CASE ('PRE')
211  CALL prep_ctrl_watflux(wm%DGW%N2M,wm%DGW%LSURF_BUDGET,wm%DGW%L2M_MIN_ZS,&
212  wm%DGW%LRAD_BUDGET,wm%DGW%LCOEF,wm%DGW%LSURF_VARS,&
213  iluout,wm%DGW%LSURF_BUDGETC )
214  IF (lnam_read) CALL read_nam_prep_watflux_n(hprogram)
215  CALL read_watflux_date(&
216  hprogram,hinit,iluout,hatmfile,hatmfiletype,kyear,kmonth,kday,ptime,wm%W%TTIME)
217 
218  CASE default
219  CALL init_io_surf_n(dtco, dgu, u, &
220  hprogram,'WATER ','WATFLX','READ ')
221  CALL read_surf(&
222  hprogram,'DTCUR',wm%W%TTIME,iresp)
223  CALL end_io_surf_n(hprogram)
224 END SELECT
225 !
226 !-----------------------------------------------------------------------------------------------------
227 ! READ PGD FILE
228 !-----------------------------------------------------------------------------------------------------
229 !
230 ! 1.3. Schemes used
231 !
232 ! Initialisation for IO
233 !
234  CALL set_surfex_filein(hprogram,'PGD ') ! change input file name to pgd name
235  CALL init_io_surf_n(dtco, dgu, u, &
236  hprogram,'WATER ','WATFLX','READ ')
237 !
238 ! Reading of the fields
239 !
240  CALL read_pgd_watflux_n(dtco, u, wm%WG, wm%W, &
241  hprogram)
242 !
243 !-------------------------------------------------------------------------------
244 !
245 !* if only physiographic fields are to be initialized, stop here.
246 !
247 ! End of IO
248 !
249  CALL end_io_surf_n(hprogram)
250  CALL set_surfex_filein(hprogram,'PREP') ! restore input file name
251 !
252 !-----------------------------------------------------------------------------------------------------
253 ! END READ PGD FILE
254 !-----------------------------------------------------------------------------------------------------
255 !
256 IF (hinit/='ALL' .AND. hinit/='SOD') THEN
257  IF (lhook) CALL dr_hook('INIT_WATFLUX_N',1,zhook_handle)
258  RETURN
259 END IF
260 !
261 !-------------------------------------------------------------------------------
262 !
263 ! Initialisation for IO
264 !
265  CALL init_io_surf_n(dtco, dgu, u, &
266  hprogram,'WATER ','WATFLX','READ ')
267 !
268 !
269 !* 2. Prognostic and cover fields:
270 ! ---------------------------
271 !
272  CALL read_watflux_n(dtco, u, wm%W, &
273  hprogram)
274 !
275 IF (hinit/='ALL') THEN
276  CALL end_io_surf_n(hprogram)
277  IF (lhook) CALL dr_hook('INIT_WATFLUX_N',1,zhook_handle)
278  RETURN
279 END IF
280 !
281 ilu = SIZE(wm%W%XCOVER,1)
282 !
283 !
284 !* 3. Specific fields when using earth system model (Ice temperature)
285 ! ---------------------------------------------------------------
286 !
287 IF(lcpl_seaice)THEN
288  ALLOCATE(wm%W%XTICE (ilu))
289  ALLOCATE(wm%W%XICE_ALB(ilu))
290  wm%W%XTICE (:)=xundef
291  wm%W%XICE_ALB(:)=xundef
292 ELSE
293  ALLOCATE(wm%W%XTICE (0))
294  ALLOCATE(wm%W%XICE_ALB(0))
295 ENDIF
296 !
297 !* 4. Albedo, emissivity and temperature fields on open water and ice
298 ! ---------------------------------------------------------------
299 !
300 ALLOCATE(wm%W%XDIR_ALB (ilu))
301 ALLOCATE(wm%W%XSCA_ALB (ilu))
302 ALLOCATE(wm%W%XEMIS (ilu))
303 wm%W%XDIR_ALB = 0.0
304 wm%W%XSCA_ALB = 0.0
305 wm%W%XEMIS = 0.0
306 !
307  CALL update_rad_water(wm%W%CWAT_ALB,wm%W%XTS,pzenith,xtt,wm%W%XEMIS,wm%W%XDIR_ALB,&
308  wm%W%XSCA_ALB,pdir_alb,psca_alb,pemis,ptsrad )
309 !
310 ptsurf(:) = wm%W%XTS(:)
311 !
312 !-------------------------------------------------------------------------------
313 !
314 !* 5. SBL air fields:
315 ! --------------
316 !
317  CALL read_watflux_sbl_n(dtco, u, wm%W, wm%WSB, &
318  hprogram)
319 !
320 !-------------------------------------------------------------------------------
321 !
322 !* 6. Chemistry / dust
323 ! ----------------
324 !
325  CALL init_chemical_n(iluout, ksv, hsv, wm%CHW%SVW, &
326  wm%CHW%CCH_NAMES, wm%CHW%CAER_NAMES, &
327  hdstnames=wm%CHW%CDSTNAMES, hsltnames=wm%CHW%CSLTNAMES )
328 !
329 !* depositiion scheme
330 !
331 
332 IF (wm%CHW%SVW%NBEQ>0 .AND. wm%CHW%CCH_DRY_DEP=='WES89') THEN
333  ALLOCATE(wm%CHW%XDEP(ilu,wm%CHW%SVW%NBEQ))
334 ELSE
335  ALLOCATE(wm%CHW%XDEP(0,0))
336 END IF
337 !
338 !-------------------------------------------------------------------------------
339 !
340 !* 7. diagnostics initialization
341 ! --------------------------
342 !
343  CALL diag_watflux_init_n(&
344  dgu, wm%DGW, wm%W, &
345  hprogram,ilu,ksw)
346 !
347 !-------------------------------------------------------------------------------
348 !
349 ! End of IO
350 !
351  CALL end_io_surf_n(hprogram)
352 IF (lhook) CALL dr_hook('INIT_WATFLUX_N',1,zhook_handle)
353 !
354 END SUBROUTINE init_watflux_n
subroutine init_io_surf_n(DTCO, DGU, U, HPROGRAM, HMASK, HSCHEME, HACTION)
subroutine init_watflux_n(DTCO, DGU, UG, U, WM, HPROGRAM, HINIT, KI, KSV, KSW, HSV, PCO2, PRHOA, PZENITH, PAZIM, PSW_BANDS, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, PTSURF, KYEAR, KMONTH, KDAY, PTIME, HATMFILE, HATMFILETYPE, HTEST)
subroutine prep_ctrl_watflux(K2M, OSURF_BUDGET, O2M_MIN_ZS, ORAD_BUDGET, OCOEF, OSURF_VARS, KLUOUT, OSURF_BUDGETC)
subroutine set_surfex_filein(HPROGRAM, HMASK)
subroutine update_rad_water(HALB, PSST, PZENITH, PTT, PEMIS, PDIR_ALB, PSCA_ALB, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD)
subroutine read_watflux_date(HPROGRAM, HINIT, KLUOUT, HATMFILE, HATMFILETYPE, KYEAR, KMONTH, KDAY, PTIME, TPTIME)
subroutine read_watflux_n(DTCO, U, W, HPROGRAM)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine read_nam_prep_watflux_n(HPROGRAM)
subroutine diag_watflux_init_n(DGU, DGW, W, HPROGRAM, KLU, KSW)
subroutine read_watflux_conf_n(CHW, DGW, W, HPROGRAM)
subroutine default_watflux(PTSTEP, POUT_TSTEP, HWAT_ALB, HINTERPOL_TS)
subroutine read_watflux_sbl_n(DTCO, U, W, WSB, HPROGRAM)
subroutine default_ch_dep(HCH_DRY_DEP)
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:6
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine read_pgd_watflux_n(DTCO, U, WG, W, HPROGRAM)
subroutine default_diag_watflux(K2M, OSURF_BUDGET, O2M_MIN_ZS, ORAD_BUDGET, OCOEF, OSURF_VARS, OSURF_BUDGETC, ORESET_BUDGETC, PDIAG_TSTEP)
subroutine read_default_watflux_n(CHW, DGW, W, HPROGRAM)
subroutine init_chemical_n(KLUOUT, KSV, HSV, YSV, HCH_NAMES, HAER_NAMES, HDSTNAMES, HSLTNAMES)