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