SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
garden_properties.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 garden_properties (T, GDM, &
7  pdir_sw, psca_sw, psw_bands, ksw, &
8  pts, pemis, palb, pta, &
9  palbnir_tveg, palbvis_tveg, &
10  palbnir_tsoil, palbvis_tsoil )
11 ! ##########################################################################
12 !
13 !!**** *GARDEN_PROPERTIES*
14 !!
15 !! PURPOSE
16 !! -------
17 !
18 ! Calculates grid-averaged albedo and emissivity (according to snow scheme)
19 !
20 !! EXTERNAL
21 !! --------
22 !!
23 !! none
24 !!
25 !! IMPLICIT ARGUMENTS
26 !! ------------------
27 !!
28 !! AUTHOR
29 !! ------
30 !!
31 !! S. Belair * Meteo-France *
32 !-------------------------------------------------------------------------------
33 !
34 !* 0. DECLARATIONS
35 ! ------------
36 !
37 !
38 !
39 USE modd_teb_n, ONLY : teb_t
41 !
42 USE modd_surf_par, ONLY : xundef
43 !
44 !
45 USE modi_isba_properties
46 USE modi_flag_teb_garden_n
47 !
48 !
49 USE yomhook ,ONLY : lhook, dr_hook
50 USE parkind1 ,ONLY : jprb
51 !
52 IMPLICIT NONE
53 !
54 !* 0.1 declarations of arguments
55 !
56 !
57 TYPE(teb_t), INTENT(INOUT) :: t
58 TYPE(teb_garden_model_t), INTENT(INOUT) :: gdm
59 !
60 REAL, DIMENSION(:,:), INTENT(IN) :: pdir_sw ! direct incoming solar radiation
61 REAL, DIMENSION(:,:), INTENT(IN) :: psca_sw ! diffus incoming solar radiation
62 REAL, DIMENSION(:) , INTENT(IN) :: psw_bands ! mean wavelength of each shortwave band (m)
63 INTEGER, INTENT(IN) :: ksw ! number of short-wave spectral bands
64 !
65 REAL, DIMENSION(:) , INTENT(OUT) :: pts ! radiative surface temperature
66 REAL, DIMENSION(:) , INTENT(OUT) :: pemis ! green areas emissivity
67 REAL, DIMENSION(:) , INTENT(OUT) :: palb ! green areas albedo
68 !
69 REAL, DIMENSION(:) , INTENT(IN), OPTIONAL :: pta ! Air temperature (K)
70 !
71 REAL, DIMENSION(:) , INTENT(OUT), OPTIONAL :: palbnir_tveg ! nearIR veg tot albedo
72 REAL, DIMENSION(:) , INTENT(OUT), OPTIONAL :: palbvis_tveg ! visible veg tot albedo
73 REAL, DIMENSION(:) , INTENT(OUT), OPTIONAL :: palbnir_tsoil ! nearIR soil tot albedo
74 REAL, DIMENSION(:) , INTENT(OUT), OPTIONAL :: palbvis_tsoil ! visible soil tot albedo
75 !
76 !-------------------------------------------------------------------------------
77 !
78 !* 0.2 Local variables
79 ! ---------------
80 !
81 INTEGER :: jlayer
82 INTEGER :: jswb
83 !
84 REAL, DIMENSION(SIZE(PALB)) :: ztsnosnow ! surf. temp. on snow free part
85 REAL, DIMENSION(SIZE(PALB)) :: ztssnow ! surf. temp. on snow covered part
86 REAL, DIMENSION(SIZE(PALB)) :: zanosnow ! snow-free surface albedo
87 REAL, DIMENSION(SIZE(PALB)) :: zasnow ! snow albedo
88 REAL, DIMENSION(SIZE(PALB)) :: zenosnow ! snow-free surface emissivity
89 REAL, DIMENSION(SIZE(PALB)) :: zesnow ! snow emissivity
90 !
91 REAL, DIMENSION(SIZE(PALB)) :: zalbnir_tveg ! nearIR veg tot albedo
92 REAL, DIMENSION(SIZE(PALB)) :: zalbvis_tveg ! visible veg tot albedo
93 REAL, DIMENSION(SIZE(PALB)) :: zalbnir_tsoil ! nearIR soil tot albedo
94 REAL, DIMENSION(SIZE(PALB)) :: zalbvis_tsoil ! visible soil tot albedo
95 !
96 REAL(KIND=JPRB) :: zhook_handle
97 !-------------------------------------------------------------------------------
98 !
99 IF (lhook) CALL dr_hook('GARDEN_PROPERTIES',0,zhook_handle)
100 !
101 !* 1. Set physical values for points where there is no garden
102 ! -------------------------------------------------------
103 !
104 ! This way, ISBA can run without problem for these points
105 !
106  CALL flag_teb_garden_n(gdm%TGD, gdm%TGDO, gdm%TGDPE, t, gdm%TVG, &
107  1)
108 !
109 !
110 !* 2. Computes several properties of gardens
111 ! --------------------------------------
112 !
113  CALL isba_properties(gdm%TVG%CISBA, gdm%TVG%LTR_ML, gdm%TGD%CUR%TSNOW, 1, &
114  pdir_sw, psca_sw, psw_bands, ksw, &
115  gdm%TGDPE%CUR%XALBNIR(:), gdm%TGDPE%CUR%XALBVIS(:), gdm%TGDPE%CUR%XALBUV(:), &
116  gdm%TGDP%XALBNIR_VEG(:), gdm%TGDP%XALBVIS_VEG(:), gdm%TGDP%XALBUV_VEG(:), &
117  gdm%TGDP%XALBNIR_SOIL(:), gdm%TGDP%XALBVIS_SOIL(:), gdm%TGDP%XALBUV_SOIL(:), &
118  gdm%TGDPE%CUR%XVEG(:), gdm%TGDPE%CUR%XLAI(:), gdm%TGDPE%CUR%XZ0(:), &
119  gdm%TGDPE%CUR%XEMIS(:),gdm%TGD%CUR%XTG(:,1), &
120  zasnow, zanosnow, zesnow, zenosnow, ztssnow, ztsnosnow, &
121  gdm%TGD%CUR%XSNOWFREE_ALB_VEG, gdm%TGD%CUR%XSNOWFREE_ALB_SOIL, &
122  zalbnir_tveg, zalbvis_tveg, zalbnir_tsoil, zalbvis_tsoil, &
123  gdm%TGD%CUR%XPSN(:), gdm%TGD%CUR%XPSNV_A(:), gdm%TGD%CUR%XPSNG(:), &
124  gdm%TGD%CUR%XPSNV(:) )
125 !
126 gdm%TGD%CUR%XSNOWFREE_ALB = zanosnow
127 !
128 !* averaged albedo
129 palb = gdm%TGD%CUR%XPSN(:) * zasnow + (1.-gdm%TGD%CUR%XPSN(:)) * zanosnow
130 !* averaged emissivity
131 pemis= gdm%TGD%CUR%XPSN(:) * zesnow + (1.-gdm%TGD%CUR%XPSN(:)) * zenosnow
132 !* averaged surface radiative temperature
133 ! (recomputed from emitted long wave)
134 pts =((gdm%TGD%CUR%XPSN(:) * zesnow * ztssnow**4 + &
135  (1.-gdm%TGD%CUR%XPSN(:)) * zenosnow * ztsnosnow**4) / pemis)**0.25
136 !
137 IF(present(palbnir_tveg))palbnir_tveg(:)=zalbnir_tveg(:)
138 IF(present(palbvis_tveg))palbvis_tveg(:)=zalbvis_tveg(:)
139 IF(present(palbnir_tsoil))palbnir_tsoil(:)=zalbnir_tsoil(:)
140 IF(present(palbvis_tsoil))palbvis_tsoil(:)=zalbvis_tsoil(:)
141 !
142 IF (lhook) CALL dr_hook('GARDEN_PROPERTIES',1,zhook_handle)
143 !
144 !-------------------------------------------------------------------------------
145 !
146 END SUBROUTINE garden_properties
147 
subroutine isba_properties(HISBA, OTR_ML, TPSNOW, KPATCH, PDIR_SW, PSCA_SW, PSW_BANDS, KSW, PALBNIR, PALBVIS, PALBUV, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PALBNIR_SOIL, PALBVIS_SOIL, PALBUV_SOIL, PVEG, PLAI, PZ0, PEMIS, PTG, PASNOW, PANOSNOW, PESNOW, PENOSNOW, PTSSNOW, PTSNOSNOW, PSNOWFREE_ALB_VEG, PSNOWFREE_ALB_SOIL, PALBNIR_TVEG, PALBVIS_TVEG, PALBNIR_TSOIL, PALBVIS_TSOIL, PPSN, PPSNV_A, PPSNG, PPSNV)
subroutine flag_teb_garden_n(TGD, TGDO, TGDPE, T, TVG, KFLAG)
subroutine garden_properties(T, GDM, PDIR_SW, PSCA_SW, PSW_BANDS, KSW, PTS, PEMIS, PALB, PTA, PALBNIR_TVEG, PALBVIS_TVEG, PALBNIR_TSOIL, PALBVIS_TSOIL)