SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
avg_albedo_emis_greenroof.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 avg_albedo_emis_greenroof (TGR, &
7  halbedo, &
8  pveg,pz0,plai,ptg1, &
9  psw_bands, &
10  palbnir_veg,palbvis_veg, &
11  palbuv_veg, &
12  palbnir_soil,palbvis_soil, &
13  palbuv_soil, &
14  pemis_eco, &
15  tpsnow, &
16  palbnir_eco,palbvis_eco, &
17  palbuv_eco, &
18  pdir_alb,psca_alb, &
19  pemis,ptsrad )
20 ! ###################################################
21 !
22 !!**** ** computes radiative fields used in GREENROOF
23 !!
24 !! PURPOSE
25 !! -------
26 !!
27 !! METHOD
28 !! ------
29 !! Based on avg_albedo_emis_garden
30 !!
31 !! EXTERNAL
32 !! --------
33 !!
34 !! IMPLICIT ARGUMENTS
35 !! ------------------
36 !!
37 !! REFERENCE
38 !! ---------
39 !!
40 !! AUTHOR
41 !! ------
42 !!
43 !! V. Masson Meteo-France
44 !!
45 !! MODIFICATION
46 !! ------------
47 !!
48 !! Original 01/2004
49 !! A. Bogatchev 09/2005 EBA snow option
50 !! B. Decharme 2008 The fraction of vegetation covered by snow must be
51 !! <= to XPSNG
52 ! C. de Munck & A. Lemonsu 09/2011 Greenroofs
53 !----------------------------------------------------------------------------
54 !
55 !* 0. DECLARATION
56 ! -----------
57 !
58 !
60 !
61 USE modd_surf_par, ONLY : xundef
62 !
64 !
65 USE modd_snow_par, ONLY : xemissn
66 USE modd_surf_par, ONLY : xundef
67 !
68 !
69 USE modi_albedo
70 USE modi_albedo_from_nir_vis
71 USE modi_isba_snow_frac
72 !
73 !
74 USE yomhook ,ONLY : lhook, dr_hook
75 USE parkind1 ,ONLY : jprb
76 !
77 IMPLICIT NONE
78 !
79 !* 0.1 Declaration of arguments
80 ! ------------------------
81 !
82 !
83 TYPE(teb_greenroof_t), INTENT(INOUT) :: tgr
84 !
85  CHARACTER(LEN=4), INTENT(IN) :: halbedo ! albedo type
86 ! Albedo dependance with surface soil water content
87 ! "EVOL" = albedo evolves with soil wetness
88 ! "DRY " = constant albedo value for dry soil
89 ! "WET " = constant albedo value for wet soil
90 ! "MEAN" = constant albedo value for medium soil wetness
91 !
92 REAL, DIMENSION(:), INTENT(IN) :: pveg ! vegetation fraction
93 REAL, DIMENSION(:), INTENT(IN) :: pz0 ! roughness length
94 REAL, DIMENSION(:), INTENT(IN) :: plai ! leaf area index
95 REAL, DIMENSION(:), INTENT(IN) :: ptg1 ! soil surface temperature
96 REAL, DIMENSION(:), INTENT(IN) :: psw_bands ! middle wavelength of each band
97 
98 REAL, DIMENSION(:), INTENT(IN) :: palbnir_veg ! near-infra-red albedo of vegetation
99 REAL, DIMENSION(:), INTENT(IN) :: palbvis_veg ! visible albedo of vegetation
100 REAL, DIMENSION(:), INTENT(IN) :: palbuv_veg ! UV albedo of vegetation
101 REAL, DIMENSION(:), INTENT(IN) :: palbnir_soil! near-infra-red albedo of soil
102 REAL, DIMENSION(:), INTENT(IN) :: palbvis_soil! visible albedo of soil
103 REAL, DIMENSION(:), INTENT(IN) :: palbuv_soil ! UV albedo of soil
104 REAL, DIMENSION(:), INTENT(IN) :: pemis_eco ! emissivity (soil+vegetation)
105 TYPE(surf_snow), INTENT(IN) :: tpsnow ! prognostic snow cover
106 !
107 REAL, DIMENSION(:), INTENT(OUT) :: palbnir_eco ! near-infra-red albedo (soil+vegetation)
108 REAL, DIMENSION(:), INTENT(OUT) :: palbvis_eco ! visible albedo (soil+vegetation)
109 REAL, DIMENSION(:), INTENT(OUT) :: palbuv_eco ! UV albedo (soil+vegetation)
110 !
111 REAL, DIMENSION(:,:), INTENT(OUT) :: pdir_alb ! averaged direct albedo (per wavelength)
112 REAL, DIMENSION(:,:), INTENT(OUT) :: psca_alb ! averaged diffuse albedo (per wavelength)
113 REAL, DIMENSION(:), INTENT(OUT) :: pemis ! averaged emissivity
114 REAL, DIMENSION(:), INTENT(OUT) :: ptsrad ! averaged radiaitve temp.
115 !
116 !
117 !* 0.2 Declaration of local variables
118 ! ------------------------------
119 !
120 !
121 REAL, DIMENSION(SIZE(PALBNIR_VEG)) :: zalbnir ! near-infra-red albedo with snow
122 REAL, DIMENSION(SIZE(PALBVIS_VEG)) :: zalbvis ! visible albedo with snow
123 REAL, DIMENSION(SIZE(PALBUV_VEG )) :: zalbuv ! UV albedo with snow
124 !
125 REAL(KIND=JPRB) :: zhook_handle
126 !-------------------------------------------------------------------------------
127 !
128 !
129 !* 1. averaged albedo on natural continental surfaces (except prognostic snow)
130 ! -----------------------------------------------
131 !
132 IF (lhook) CALL dr_hook('AVG_ALBEDO_EMIS_GREENROOF',0,zhook_handle)
133  CALL albedo(halbedo, &
134  palbvis_veg,palbnir_veg,palbuv_veg,pveg, &
135  palbvis_soil,palbnir_soil,palbuv_soil, &
136  palbvis_eco,palbnir_eco,palbuv_eco )
137 
138 !
139 !* 2. averaged albedo and emis. on natural continental surfaces (with prognostic snow)
140 ! ---------------------------------------------------------
141 !
142 zalbnir(:) = 0.
143 zalbvis(:) = 0.
144 zalbuv(:) = 0.
145 !
146 pdir_alb(:,:) = 0.
147 psca_alb(:,:) = 0.
148 pemis(:) = 0.
149 ptsrad(:) = 0.
150 !
151 !
152  CALL isba_snow_frac(tgr%CUR%TSNOW%SCHEME, &
153  tgr%CUR%TSNOW%WSNOW(:,:,1), tgr%CUR%TSNOW%RHO(:,:,1), &
154  tgr%CUR%TSNOW%ALB (:,1), &
155  pveg(:), plai(:), pz0(:), &
156  tgr%CUR%XPSN(:), tgr%CUR%XPSNV_A(:), &
157  tgr%CUR%XPSNG(:), tgr%CUR%XPSNV(:) )
158 !
159  WHERE (pveg(:)/=xundef)
160 !
161 ! albedo on this tile
162 !
163  zalbnir(:) = (1.-tgr%CUR%XPSN(:))*palbnir_eco(:) + tgr%CUR%XPSN(:) *tpsnow%ALB(:,1)
164 
165  zalbvis(:) = (1.-tgr%CUR%XPSN(:))*palbvis_eco(:) + tgr%CUR%XPSN(:) *tpsnow%ALB(:,1)
166 
167  zalbuv(:) = (1.-tgr%CUR%XPSN(:))*palbuv_eco(:) + tgr%CUR%XPSN(:) *tpsnow%ALB(:,1)
168  END WHERE
169 !
170 !* albedo for each wavelength
171 !
172  CALL albedo_from_nir_vis(psw_bands,zalbnir, zalbvis, zalbuv, &
173  pdir_alb(:,:), psca_alb(:,:) )
174 !
175 ! emissivity
176 !
177  WHERE (pemis_eco(:)/=xundef)
178  pemis(:) = (1.-tgr%CUR%XPSN(:))*pemis_eco(:) + tgr%CUR%XPSN(:) * xemissn
179  END WHERE
180 !
181 !* radiative surface temperature
182 !
183  IF (tpsnow%SCHEME=='D95' .OR. tpsnow%SCHEME=='EBA') THEN
184  ptsrad(:) = ptg1(:)
185  ELSE IF (tpsnow%SCHEME=='3-L' .OR. tpsnow%SCHEME=='CRO') THEN
186  WHERE (pemis_eco(:)/=xundef)
187  ptsrad(:) = ( ( (1.-tgr%CUR%XPSN(:))*pemis(:)*ptg1(:)**4 &
188  + tgr%CUR%XPSN(:) *tpsnow%EMIS(:,1)*tpsnow%TS(:,1)**4 ) )**0.25 &
189  / pemis(:)**0.25
190  END WHERE
191  END IF
192 !
193 IF (lhook) CALL dr_hook('AVG_ALBEDO_EMIS_GREENROOF',1,zhook_handle)
194 !
195 !-------------------------------------------------------------------------------
196 !
197 END SUBROUTINE avg_albedo_emis_greenroof
subroutine albedo_from_nir_vis(PSW_BANDS, PALBNIR, PALBVIS, PALBUV, PDIR_ALB, PSCA_ALB)
subroutine avg_albedo_emis_greenroof(TGR, HALBEDO, PVEG, PZ0, PLAI, PTG1, PSW_BANDS, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PALBNIR_SOIL, PALBVIS_SOIL, PALBUV_SOIL, PEMIS_ECO, TPSNOW, PALBNIR_ECO, PALBVIS_ECO, PALBUV_ECO, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD)
subroutine isba_snow_frac(HSNOW, PWSNOW, PRSNOW, PASNOW, PVEG, PLAI, PZ0, PPSN, PPSNV_A, PPSNG, PPSNV)