SURFEX v8.1
General documentation of Surfex
init_teb_gardenn.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_teb_garden_n (DTCO, UG, U, DMTO, TOP, IO, DTV, K, P, PEK, &
7  DK, DEK, DECK, DMK, HPROGRAM, HINIT, KI, KSW, PSW_BANDS, KPATCH)
8 !#############################################################
9 !
10 !!**** *INIT_TEB_GARDEN_n* - routine to initialize ISBA
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! A. Lemonsu *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 09/2009
36 !-------------------------------------------------------------------------------
37 !
38 !* 0. DECLARATIONS
39 ! ------------
40 !
42 USE modd_diag_n, ONLY : diag_t
44 USE modd_surf_atm_n, ONLY : surf_atm_t
47 !
49 USE modd_data_isba_n, ONLY : data_isba_t
53 !
56 !
57 USE modd_data_cover_par, ONLY: nvegtype
58 USE modd_surf_par, ONLY: xundef, nundef
59 
60 USE modd_surf_atm, ONLY: lcpl_arp
61 !
62 USE modi_get_luout
63 USE modi_allocate_teb_veg
64 USE modi_abor1_sfx
65 USE modi_read_teb_garden_n
66 USE modi_init_veg_n
67 USE modi_soil_albedo
68 USE modi_init_from_data_teb_veg_n
69 USE modi_avg_albedo_emis_teb_veg
70 USE modi_diag_teb_veg_init_n
71 !
72 USE yomhook ,ONLY : lhook, dr_hook
73 USE parkind1 ,ONLY : jprb
74 !
75 IMPLICIT NONE
76 !
77 !* 0.1 Declarations of arguments
78 ! -------------------------
79 !
80 !
81 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
82 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
83 TYPE(surf_atm_t), INTENT(INOUT) :: U
84 TYPE(diag_misc_teb_options_t), INTENT(INOUT) :: DMTO
85 TYPE(teb_options_t), INTENT(INOUT) :: TOP
86 !
87 TYPE(isba_options_t), INTENT(INOUT) :: IO
88 TYPE(data_isba_t), INTENT(INOUT) :: DTV
89 TYPE(isba_k_t), INTENT(INOUT) :: K
90 TYPE(isba_p_t), INTENT(INOUT) :: P
91 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
92 TYPE(diag_t), INTENT(INOUT) :: DK
93 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DEK
94 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DECK
95 TYPE(diag_misc_isba_t), INTENT(INOUT) :: DMK
96 !
97  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
98  CHARACTER(LEN=3), INTENT(IN) :: HINIT ! choice of fields to initialize
99 INTEGER, INTENT(IN) :: KI ! number of points
100 INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
101 REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! middle wavelength of each band
102 INTEGER, INTENT(IN) :: KPATCH
103 !
104 !
105 !
106 !* 0.2 Declarations of local variables
107 ! -------------------------------
108 !
109 INTEGER :: ILUOUT ! unit of output listing file
110 !
111 INTEGER :: IDECADE ! decade of simulation
112 !
113  CHARACTER(LEN=3) :: YPATCH ! patch identificator
114 !
115 REAL, DIMENSION(KI) :: ZWG1 ! work array for surface water content
116 REAL, DIMENSION(KI) :: ZTG1 ! work array for surface temperature
117 REAL, DIMENSION(KI,KSW) :: ZDIR_ALB ! direct albedo for each band
118 REAL, DIMENSION(KI,KSW) :: ZSCA_ALB ! diffuse albedo for each band
119 REAL, DIMENSION(KI) :: ZEMIS ! emissivity
120 REAL, DIMENSION(KI) :: ZTSRAD ! radiative temperature
121 !
122 REAL(KIND=JPRB) :: ZHOOK_HANDLE
123 !
124 !-------------------------------------------------------------------------------
125 !
126 ! Initialisation for IO
127 !
128 IF (lhook) CALL dr_hook('INIT_TEB_GARDEN_N',0,zhook_handle)
129  CALL get_luout(hprogram,iluout)
130 !
131 io%CRAIN = "DEF"
132 !
133 !-------------------------------------------------------------------------------
134 !
135  CALL allocate_teb_veg(pek, ki, io%NGROUND_LAYER, io%NNBIOMASS)
136 !
137 !-------------------------------------------------------------------------------
138 !
139 IF( io%CCPSURF=='DRY' .AND. lcpl_arp ) THEN
140  CALL abor1_sfx('CCPSURF=DRY must not be used with LCPL_ARP')
141 ENDIF
142 !
143 !-------------------------------------------------------------------------------
144 !
145 IF (hinit/='ALL') THEN
146  IF (lhook) CALL dr_hook('INIT_TEB_GARDEN_N',1,zhook_handle)
147  RETURN
148 ENDIF
149 !
150 !-------------------------------------------------------------------------------
151 ! Variables needed to run isba
152 !
153 ALLOCATE(k%XFFLOOD (ki))
154 ALLOCATE(k%XFF (ki))
155 ALLOCATE(k%XFFG (ki))
156 ALLOCATE(k%XFFV (ki))
157 ALLOCATE(k%XFFROZEN(ki))
158 ALLOCATE(k%XALBF (ki))
159 ALLOCATE(k%XEMISF (ki))
160 k%XFFLOOD = 0.0
161 k%XFF = 0.0
162 k%XFFG = 0.0
163 k%XFFV = 0.0
164 k%XFFROZEN = 0.0
165 k%XALBF = 0.0
166 k%XEMISF = 0.0
167 !
168 ALLOCATE(k%XFSAT(ki))
169 k%XFSAT(:) = 0.0
170 !
171 !-------------------------------------------------------------------------------
172 !
173 !* 10. Prognostic and semi-prognostic fields
174 ! -------------------------------------
175 !
176 !* allocation of urban green area variables
177 !
178 !
179 ypatch=' '
180 IF (top%NTEB_PATCH>1) WRITE(ypatch,fmt='(A,I1,A)') 'T',kpatch,'_'
181 !
182  CALL read_teb_garden_n(dtco, u, io, p, pek, hprogram,ypatch)
183 !
184 dtv%LIMP_VEG = .false.
185 dtv%LIMP_Z0 = .false.
186 dtv%LIMP_EMIS = .false.
187 !
188 p%NSIZE_P = ki
189  CALL init_veg_n(io, k, p, pek, dtv, dmto%LSURF_DIAG_ALBEDO, zdir_alb, zsca_alb, zemis, ztsrad )
190 !
191 zwg1(:) = pek%XWG(:,1)
192 ztg1(:) = pek%XTG(:,1)
193 !
194 IF (.NOT. io%LPAR) THEN
195  CALL soil_albedo(io%CALBEDO, k%XWSAT(:,1),zwg1, k, pek, "ALL" )
196 ELSE
197  IF (top%TTIME%TDATE%MONTH /= nundef) THEN
198  idecade = 3 * ( top%TTIME%TDATE%MONTH - 1 ) + min(top%TTIME%TDATE%DAY-1,29) / 10 + 1
199  ELSE
200  idecade = 1
201  END IF
202  CALL init_from_data_teb_veg_n(dtv, k, p, pek, idecade, .false., .false., .false., .true. )
203 END IF
204 !
205 
206 WHERE (pek%XALBNIR_SOIL(:)==xundef)
207  pek%XALBNIR_SOIL(:)=0.225
208  pek%XALBVIS_SOIL(:)=0.15
209  pek%XALBUV_SOIL (:)=0.07965
210 ENDWHERE
211 !
212  CALL avg_albedo_emis_teb_veg(pek, io%CALBEDO, ztg1, psw_bands, zdir_alb, zsca_alb, zemis,ztsrad )
213 !
214  CALL diag_teb_veg_init_n(dk, dek, deck, dmk, ki, pek%TSNOW%NLAYER)
215 !
216 !-------------------------------------------------------------------------------
217 !
218 IF (lhook) CALL dr_hook('INIT_TEB_GARDEN_N',1,zhook_handle)
219 !
220 !-------------------------------------------------------------------------------
221 !
222 !
223 END SUBROUTINE init_teb_garden_n
subroutine init_veg_n(IO, KK, PK, PEK, DTV, OSURF_DIAG_ALBEDO, PDIR_ALB, PSCA_ALB, PEMIS_OUT, PTSRAD)
Definition: init_vegn.F90:8
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
subroutine allocate_teb_veg(PEK, KLU, KGROUND_LAYER, KNBIOMASS)
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter nundef
subroutine init_teb_garden_n(DTCO, UG, U, DMTO, TOP, IO, DTV, K, P, PEK, DK, DEK, DECK, DMK, HPROGRAM, HINIT, KI, KSW, PSW_BANDS, KPATCH)
subroutine diag_teb_veg_init_n(DK, DEK, DECK, DMK, KLU, KSNOW_LAYE
subroutine soil_albedo(HALBEDO, PWSAT, PWG1, KK, PEK, HBAND)
Definition: soil_albedo.F90:7
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
logical lhook
Definition: yomhook.F90:15
subroutine init_from_data_teb_veg_n(DTV, K, P, PEK, KDECADE, OUPD
subroutine avg_albedo_emis_teb_veg(PEK, HALBEDO, PTG1, PSW_BANDS,
subroutine read_teb_garden_n(DTCO, U, IO, P, PEK, HPROGRAM, HPATCH