SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
init_flaken.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_flake_n ( DTCO, DGU, UG, U, FM, &
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_FLAKE_n* - routine to initialize FLAKE model
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 07/11 : read pgd+prep
44 !! Modified 04/2013, P. Le Moigne: FLake chemistry
45 !! Modified 04/2013, P. Le Moigne: Coupling with AGCM
46 !-------------------------------------------------------------------------------
47 !
48 !* 0. DECLARATIONS
49 ! ------------
50 !
51 !
52 USE modd_surfex_n, ONLY : flake_model_t
53 !
58 USE modd_surf_atm_n, ONLY : surf_atm_t
59 !
60 !
61 USE modd_csts, ONLY : xtt, xpi, xomega
62 !
63 USE modd_water_par, ONLY : xalbwatice, xalbwatsnow
64 USE modd_snow_par, ONLY : xansmin, xansmax
65 !
66 !
67 !
68 !
69 USE modd_chs_aerosol, ONLY: lvarsigi, lvarsigj
70 USE modd_dst_surf, ONLY: lvarsig_dst, ndstmde, ndst_mdebeg, lrgfix_dst
71 USE modd_slt_surf, ONLY: lvarsig_slt, nsltmde, nslt_mdebeg, lrgfix_slt
72 !
73 USE modd_read_namelist, ONLY : lnam_read
74 USE modd_surf_par, ONLY : xundef, nundef
75 !
76 USE modi_init_io_surf_n
77 USE modi_default_ch_dep
78 USE modi_default_flake
79 USE modi_default_diag_flake
80 USE modi_read_default_flake_n
81 USE modi_read_flake_conf_n
82 USE modi_read_flake_n
83 USE modi_read_pgd_flake_n
84 USE modi_diag_flake_init_n
85 USE modi_end_io_surf_n
86 USE modi_get_luout
88 USE modi_read_flake_date
89 USE modi_read_nam_prep_flake_n
90 USE modi_init_chemical_n
91 USE modi_prep_ctrl_flake
92 USE modi_update_rad_flake
93 USE modi_read_flake_sbl_n
94 !
95 USE modi_set_surfex_filein
96 !
97 USE yomhook ,ONLY : lhook, dr_hook
98 USE parkind1 ,ONLY : jprb
99 !
100 USE modi_abor1_sfx
101 !
102 USE modi_get_type_dim_n
103 !
104 IMPLICIT NONE
105 !
106 !* 0.1 Declarations of arguments
107 ! -------------------------
108 !
109 !
110 TYPE(data_cover_t), INTENT(INOUT) :: dtco
111 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
112 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
113 TYPE(surf_atm_t), INTENT(INOUT) :: u
114 TYPE(flake_model_t), INTENT(INOUT) :: fm
115 !
116  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
117  CHARACTER(LEN=3), INTENT(IN) :: hinit ! choice of fields to initialize
118 INTEGER, INTENT(IN) :: ki ! number of points
119 INTEGER, INTENT(IN) :: ksv ! number of scalars
120 INTEGER, INTENT(IN) :: ksw ! number of short-wave spectral bands
121  CHARACTER(LEN=6), DIMENSION(KI), INTENT(IN) :: hsv ! name of all scalar variables
122 REAL, DIMENSION(KI), INTENT(IN) :: pco2 ! CO2 concentration (kg/m3)
123 REAL, DIMENSION(KI), INTENT(IN) :: prhoa ! air density
124 REAL, DIMENSION(KI), INTENT(IN) :: pzenith ! solar zenithal angle
125 REAL, DIMENSION(KI), INTENT(IN) :: pazim ! solar azimuthal angle (rad from N, clock)
126 REAL, DIMENSION(KSW), INTENT(IN) :: psw_bands ! middle wavelength of each band
127 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: pdir_alb ! direct albedo for each band
128 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: psca_alb ! diffuse albedo for each band
129 REAL, DIMENSION(KI), INTENT(OUT) :: pemis ! emissivity
130 REAL, DIMENSION(KI), INTENT(OUT) :: ptsrad ! radiative temperature
131 REAL, DIMENSION(KI), INTENT(OUT) :: ptsurf ! surface effective temperature (K)
132 INTEGER, INTENT(IN) :: kyear ! current year (UTC)
133 INTEGER, INTENT(IN) :: kmonth ! current month (UTC)
134 INTEGER, INTENT(IN) :: kday ! current day (UTC)
135 REAL, INTENT(IN) :: ptime ! current time since
136  ! midnight (UTC, s)
137 !
138  CHARACTER(LEN=28), INTENT(IN) :: hatmfile ! atmospheric file name
139  CHARACTER(LEN=6), INTENT(IN) :: hatmfiletype! atmospheric file type
140  CHARACTER(LEN=2), INTENT(IN) :: htest ! must be equal to 'OK'
141 !
142 !
143 !
144 !* 0.2 Declarations of local variables
145 ! -------------------------------
146 !
147 !
148 INTEGER :: ilu ! sizes of FLAKE arrays
149 INTEGER :: iluout ! unit of output listing file
150 INTEGER :: iresp ! return code
151 !
152 REAL(KIND=JPRB) :: zhook_handle
153 !
154 !-------------------------------------------------------------------------------
155 !
156 
157 ! Initialisation for IO
158 !
159 IF (lhook) CALL dr_hook('INIT_FLAKE_N',0,zhook_handle)
160  CALL get_luout(hprogram,iluout)
161 !
162 IF (htest/='OK') THEN
163  CALL abor1_sfx('INIT_FLAKEN: FATAL ERROR DURING ARGUMENT TRANSFER')
164 END IF
165 !
166 ALLOCATE(fm%DGMF%XZWAT_PROFILE(100))
167 !
168 ! Others litlle things
169 !
170 pdir_alb = xundef
171 psca_alb = xundef
172 pemis = xundef
173 ptsrad = xundef
174 ptsurf = xundef
175 !
176 IF (lnam_read) THEN
177  !
178  !* 0. Defaults
179  ! --------
180  !
181  ! 0.1. Hard defaults
182  !
183  CALL default_flake(fm%F%XTSTEP,fm%F%XOUT_TSTEP,fm%F%LSEDIMENTS,fm%F%CSNOW_FLK,fm%F%CFLK_FLUX,fm%F%CFLK_ALB,&
184  fm%F%LSKINTEMP)
185  CALL default_ch_dep(fm%CHF%CCH_DRY_DEP)
186  CALL default_diag_flake(fm%DGF%N2M,fm%DGF%LSURF_BUDGET,fm%DGF%L2M_MIN_ZS,fm%DGF%LRAD_BUDGET,&
187  fm%DGF%LCOEF,fm%DGF%LSURF_VARS, fm%DGMF%LWATER_PROFILE,fm%DGF%LSURF_BUDGETC,&
188  fm%DGF%LRESET_BUDGETC,fm%DGF%XDIAG_TSTEP,fm%DGMF%XZWAT_PROFILE )
189  !
190 ENDIF
191 !
192 ! 0.2. Defaults from file header
193 !
194  CALL read_default_flake_n(fm%CHF, fm%DGF, fm%DGMF, fm%F, &
195  hprogram)
196 
197 !
198 !* 1.1 Reading of configuration:
199 ! -------------------------
200 !
201  CALL read_flake_conf_n(fm%CHF, fm%DGF, fm%DGMF, fm%F, &
202  hprogram)
203 !
204 !-------------------------------------------------------------------------------
205 !
206 !* 1. Cover fields and grid:
207 ! ---------------------
208 !* date
209 !
210 SELECT CASE (hinit)
211  CASE ('PGD')
212  fm%F%TTIME%TDATE%YEAR = nundef
213  fm%F%TTIME%TDATE%MONTH= nundef
214  fm%F%TTIME%TDATE%DAY = nundef
215  fm%F%TTIME%TIME = xundef
216 
217  CASE ('PRE')
218  CALL prep_ctrl_flake(fm%DGF%N2M,fm%DGF%LSURF_BUDGET,fm%DGF%L2M_MIN_ZS,fm%DGF%LRAD_BUDGET,&
219  fm%DGF%LCOEF,fm%DGF%LSURF_VARS,iluout,&
220  fm%DGMF%LWATER_PROFILE,fm%DGF%LSURF_BUDGETC)
221  IF (lnam_read) CALL read_nam_prep_flake_n(hprogram)
222  CALL read_flake_date(&
223  hprogram,hinit,iluout,hatmfile,hatmfiletype,kyear,kmonth,kday,ptime,fm%F%TTIME)
224 
225  CASE default
226  CALL init_io_surf_n(dtco, dgu, u, &
227  hprogram,'WATER ','FLAKE ','READ ')
228  CALL read_surf(&
229  hprogram,'DTCUR',fm%F%TTIME,iresp)
230  CALL end_io_surf_n(hprogram)
231 END SELECT
232 !
233 !-----------------------------------------------------------------------------------------------------
234 ! READ PGD FILE
235 !-----------------------------------------------------------------------------------------------------
236 !
237 ! Initialisation for IO
238 !
239  CALL set_surfex_filein(hprogram,'PGD ') ! change input file name to pgd name
240  CALL init_io_surf_n(dtco, dgu, u, &
241  hprogram,'WATER ','FLAKE ','READ ')
242 !
243 ! Reading of the fields
244 !
245  CALL read_pgd_flake_n(dtco, u, fm%FG, fm%F, &
246  hprogram)
247 !
248  CALL end_io_surf_n(hprogram)
249  CALL set_surfex_filein(hprogram,'PREP') ! restore input file name
250 !
251 !-----------------------------------------------------------------------------------------------------
252 ! END READ PGD FILE
253 !-----------------------------------------------------------------------------------------------------
254 !
255 !* if only physiographic fields are to be initialized, stop here.
256 !
257 IF (hinit/='ALL') THEN
258  IF (lhook) CALL dr_hook('INIT_FLAKE_N',1,zhook_handle)
259  RETURN
260 END IF
261 !
262 !-------------------------------------------------------------------------------
263 !
264 !* 2. Prognostic and cover fields:
265 ! ---------------------------
266 !
267  CALL init_io_surf_n(dtco, dgu, u, &
268  hprogram,'WATER ','FLAKE ','READ ')
269 !
270  CALL read_flake_n(dtco, u, fm%F, &
271  hprogram)
272 !
273 ilu = SIZE(fm%F%XCOVER,1)
274 !
275 !-------------------------------------------------------------------------------
276 !
277 !* 3. Specific fields
278 ! ---------------
279 !
280 ALLOCATE(fm%F%XCORIO (ilu))
281 ALLOCATE(fm%F%XICE_ALB (ilu))
282 ALLOCATE(fm%F%XSNOW_ALB (ilu))
283 ALLOCATE(fm%F%XEXTCOEF_ICE (ilu))
284 ALLOCATE(fm%F%XEXTCOEF_SNOW (ilu))
285 !
286 fm%F%XCORIO(:) = 2*xomega*sin(fm%FG%XLAT(:)*xpi/180.)
287 !
288 fm%F%XICE_ALB = xalbwatice ! constant, should be improved latter
289 fm%F%XSNOW_ALB = xalbwatsnow ! constant, should be improved latter
290 !
291 fm%F%XEXTCOEF_ICE = xundef !not used
292 fm%F%XEXTCOEF_SNOW = xundef !not used
293 !-------------------------------------------------------------------------------
294 !
295 !* 4. Albedo, emissivity and radiative fields on lake
296 ! -----------------------------------------------
297 !
298 ALLOCATE(fm%F%XDIR_ALB (ilu))
299 ALLOCATE(fm%F%XSCA_ALB (ilu))
300 ALLOCATE(fm%F%XEMIS (ilu))
301 fm%F%XDIR_ALB = 0.0
302 fm%F%XSCA_ALB = 0.0
303 fm%F%XEMIS = 0.0
304 !
305  CALL update_rad_flake(fm%F%CFLK_ALB,fm%F%XTS,pzenith,fm%F%XH_ICE,fm%F%XH_SNOW,&
306  fm%F%XICE_ALB,fm%F%XSNOW_ALB,fm%F%XDIR_ALB,fm%F%XSCA_ALB,&
307  fm%F%XEMIS,pdir_alb,psca_alb,pemis,ptsrad )
308 !
309 ptsurf(:) = fm%F%XTS(:)
310 !
311 !-------------------------------------------------------------------------------
312 !
313 !* 6. SBL air fields:
314 ! --------------
315 !
316  CALL read_flake_sbl_n(dtco, u, fm%F, fm%FSB, &
317  hprogram)
318 !
319 !-------------------------------------------------------------------------------
320 !
321 !* 6. Chemistry / dust
322 ! ----------------
323 !
324 !
325  CALL init_chemical_n(iluout, ksv, hsv, fm%CHF%SVF, &
326  fm%CHF%CCH_NAMES, fm%CHF%CAER_NAMES, &
327  hdstnames=fm%CHF%CDSTNAMES, hsltnames=fm%CHF%CSLTNAMES )
328 !
329 !* depositiion scheme
330 !
331 IF (fm%CHF%SVF%NBEQ>0 .AND. fm%CHF%CCH_DRY_DEP=='WES89') THEN
332  ALLOCATE(fm%CHF%XDEP(ilu,fm%CHF%SVF%NBEQ))
333 ELSE
334  ALLOCATE(fm%CHF%XDEP(0,0))
335 END IF
336 !
337 !-------------------------------------------------------------------------------
338 !
339 !* 7. diagnostics initialization
340 ! --------------------------
341 !
342  CALL diag_flake_init_n(dgu, fm%DGF, fm%DGMF, fm%F, &
343  hprogram,ilu,ksw)
344 !
345 !-------------------------------------------------------------------------------
346 !-------------------------------------------------------------------------------
347 !
348 ! End of IO
349 !
350  CALL end_io_surf_n(hprogram)
351 IF (lhook) CALL dr_hook('INIT_FLAKE_N',1,zhook_handle)
352 !
353 END SUBROUTINE init_flake_n
subroutine init_io_surf_n(DTCO, DGU, U, HPROGRAM, HMASK, HSCHEME, HACTION)
subroutine read_default_flake_n(CHF, DGF, DGMF, F, HPROGRAM)
subroutine diag_flake_init_n(DGU, DGF, DGMF, F, HPROGRAM, KLU, KSW)
subroutine read_flake_date(HPROGRAM, HINIT, KLUOUT, HATMFILE, HATMFILETYPE, KYEAR, KMONTH, KDAY, PTIME, TPTIME)
subroutine set_surfex_filein(HPROGRAM, HMASK)
subroutine prep_ctrl_flake(K2M, OSURF_BUDGET, O2M_MIN_ZS, ORAD_BUDGET, OCOEF, OSURF_VARS, KLUOUT, OWATER_PROFILE, OSURF_BUDGETC)
subroutine default_flake(PTSTEP, POUT_TSTEP, OSEDIMENTS, HSNOW_FLK, HFLK_FLUX, HFLK_ALB, OSKINTEMP)
subroutine read_flake_conf_n(CHF, DGF, DGMF, F, HPROGRAM)
subroutine read_pgd_flake_n(DTCO, U, FG, F, HPROGRAM)
subroutine read_flake_sbl_n(DTCO, U, F, FSB, HPROGRAM)
subroutine read_flake_n(DTCO, U, F, HPROGRAM)
Definition: read_flaken.F90:6
subroutine init_flake_n(DTCO, DGU, UG, U, FM, 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)
Definition: init_flaken.F90:6
subroutine read_nam_prep_flake_n(HPROGRAM)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine default_diag_flake(K2M, OSURF_BUDGET, O2M_MIN_ZS, ORAD_BUDGET, OCOEF, OSURF_VARS, OWATER_PROFILE, OSURF_BUDGETC, ORESET_BUDGETC, PDIAG_TSTEP, PZWAT_PROFILE)
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 init_chemical_n(KLUOUT, KSV, HSV, YSV, HCH_NAMES, HAER_NAMES, HDSTNAMES, HSLTNAMES)
subroutine update_rad_flake(HALB, PTS, PZENITH, PH_ICE, PH_SNOW, PICE_ALB, PSNOW_ALB, PDIR_ALB, PSCA_ALB, PEMIS, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD)