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