SURFEX v8.1
General documentation of Surfex
init_teb_greenroofn.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_greenroof_n (DTCO, 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_GREENROOF_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 !
41 !
43 USE modd_surf_atm_n, ONLY : surf_atm_t
46 !
48 USE modd_data_isba_n, ONLY : data_isba_t
50 USE modd_diag_n, ONLY : diag_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_greenroof_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_t), INTENT(INOUT) :: U
83 TYPE(diag_misc_teb_options_t), INTENT(INOUT) :: DMTO
84 TYPE(teb_options_t), INTENT(INOUT) :: TOP
85 !
86 TYPE(isba_options_t), INTENT(INOUT) :: IO
87 TYPE(data_isba_t), INTENT(INOUT) :: DTV
88 TYPE(isba_k_t), INTENT(INOUT) :: K
89 TYPE(isba_p_t), INTENT(INOUT) :: P
90 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
91 TYPE(diag_t), INTENT(INOUT) :: DK
92 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DEK
93 TYPE(diag_evap_isba_t), INTENT(INOUT) :: DECK
94 TYPE(diag_misc_isba_t), INTENT(INOUT) :: DMK
95 !
96  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
97  CHARACTER(LEN=3), INTENT(IN) :: HINIT ! choice of fields to initialize
98 INTEGER, INTENT(IN) :: KI ! number of points
99 INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
100 REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! middle wavelength of each band
101 INTEGER, INTENT(IN) :: KPATCH
102 !
103 !* 0.2 Declarations of local variables
104 ! -------------------------------
105 !
106 INTEGER :: ILUOUT ! unit of output listing file
107 !
108 INTEGER :: IDECADE ! decade of simulation
109 !
110  CHARACTER(LEN=3) :: YPATCH ! patch identificator
111 !
112 REAL, DIMENSION(KI) :: ZWG1 ! work array for surface water content
113 REAL, DIMENSION(KI) :: ZTG1 ! work array for surface temperature
114 REAL, DIMENSION(KI,KSW) :: ZDIR_ALB ! direct albedo for each band
115 REAL, DIMENSION(KI,KSW) :: ZSCA_ALB ! diffuse albedo for each band
116 REAL, DIMENSION(KI) :: ZEMIS ! emissivity
117 REAL, DIMENSION(KI) :: ZTSRAD ! radiative temperature
118 !
119 REAL(KIND=JPRB) :: ZHOOK_HANDLE
120 !
121 !-------------------------------------------------------------------------------
122 !
123 ! Initialisation for IO
124 !
125 IF (lhook) CALL dr_hook('INIT_TEB_GREENROOF_N',0,zhook_handle)
126  CALL get_luout(hprogram,iluout)
127 !
128 !-------------------------------------------------------------------------------
129 !
130  CALL allocate_teb_veg(pek, ki, io%NGROUND_LAYER, io%NNBIOMASS)
131 !
132 !-------------------------------------------------------------------------------
133 !
134 IF( io%CCPSURF=='DRY' .AND. lcpl_arp ) THEN
135  CALL abor1_sfx('CCPSURF=DRY must not be used with LCPL_ARP')
136 ENDIF
137 !
138 !-------------------------------------------------------------------------------
139 !
140 IF (hinit/='ALL') THEN
141  IF (lhook) CALL dr_hook('INIT_TEB_GREENROOF_N',1,zhook_handle)
142  RETURN
143 ENDIF
144 !
145 !-------------------------------------------------------------------------------
146 ! Variables needed to run isba
147 !
148 ALLOCATE(k%XFFLOOD (ki))
149 ALLOCATE(k%XFF (ki))
150 ALLOCATE(k%XFFG (ki))
151 ALLOCATE(k%XFFV (ki))
152 ALLOCATE(k%XFFROZEN(ki))
153 ALLOCATE(k%XALBF (ki))
154 ALLOCATE(k%XEMISF (ki))
155 k%XFFLOOD = 0.0
156 k%XFF = 0.0
157 k%XFFG = 0.0
158 k%XFFV = 0.0
159 k%XFFROZEN = 0.0
160 k%XALBF = 0.0
161 k%XEMISF = 0.0
162 !
163 ALLOCATE(k%XFSAT(ki))
164 k%XFSAT(:) = 0.0
165 !
166 !-------------------------------------------------------------------------------
167 !
168 !* 2. Prognostic and semi-prognostic fields
169 ! -------------------------------------
170 !
171 !* allocation of urban green area variables
172 !
173 !
174 ypatch=' '
175 IF (top%NTEB_PATCH>1) WRITE(ypatch,fmt='(A,I1,A)') 'T',kpatch,'_'
176 !
177  CALL read_teb_greenroof_n(dtco, u, io, p, pek, hprogram,ypatch)
178 !
179 dtv%LIMP_VEG = .false.
180 dtv%LIMP_Z0 = .false.
181 dtv%LIMP_EMIS = .false.
182 !
183 p%NSIZE_P = ki
184  CALL init_veg_n(io, k, p, pek, dtv, dmto%LSURF_DIAG_ALBEDO, zdir_alb, zsca_alb, zemis, ztsrad )
185 !
186 zwg1(:) = pek%XWG(:,1)
187 ztg1(:) = pek%XTG(:,1)
188 !
189 IF (.NOT. io%LPAR) THEN
190  CALL soil_albedo(io%CALBEDO, k%XWSAT(:,1),zwg1, k, pek, "ALL" )
191 ELSE
192  IF (top%TTIME%TDATE%MONTH /= nundef) THEN
193  idecade = 3 * ( top%TTIME%TDATE%MONTH - 1 ) + min(top%TTIME%TDATE%DAY-1,29) / 10 + 1
194  ELSE
195  idecade = 1
196  END IF
197  CALL init_from_data_teb_veg_n(dtv, k, p, pek, idecade, .false., .false., .false., .true. )
198 END IF
199 !
200 WHERE (pek%XALBNIR_SOIL(:)==xundef)
201  pek%XALBNIR_SOIL(:)=0.225
202  pek%XALBVIS_SOIL(:)=0.15
203  pek%XALBUV_SOIL (:)=0.07965
204 ENDWHERE
205 !
206  CALL avg_albedo_emis_teb_veg(pek, io%CALBEDO, ztg1, psw_bands, zdir_alb, zsca_alb, zemis,ztsrad )
207 !
208  CALL diag_teb_veg_init_n(dk, dek, deck, dmk, ki, pek%TSNOW%NLAYER)
209 !
210 !-------------------------------------------------------------------------------
211 !
212 IF (lhook) CALL dr_hook('INIT_TEB_GREENROOF_N',1,zhook_handle)
213 !
214 !-------------------------------------------------------------------------------
215 !
216 !
217 
218 END SUBROUTINE init_teb_greenroof_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 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 read_teb_greenroof_n(DTCO, U, IO, P, PEK, HPROGRAM, HPA
subroutine init_teb_greenroof_n(DTCO, U, DMTO, TOP, IO, DTV, K, P, PEK, DK, DEK, DECK, DMK, HPROGRAM, HINIT, KI, KSW, PSW_BANDS, KPATCH)
subroutine init_from_data_teb_veg_n(DTV, K, P, PEK, KDECADE, OUPD
subroutine avg_albedo_emis_teb_veg(PEK, HALBEDO, PTG1, PSW_BANDS,