SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
radiative_transfert.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 radiative_transfert(OAGRI_TO_GRASS, PVEGTYPE, &
7  palbvis_veg, palbvis_soil, palbnir_veg, palbnir_soil, &
8  psw_rad, plai, pzenith, pabc, &
9  pfaparc, pfapirc, pmus, plai_effc, oshade, piacan, &
10  piacan_sunlit, piacan_shade, pfrac_sun, &
11  pfapar, pfapir, pfapar_bs, pfapir_bs )
12 ! #########################################################################
13 !
14 !!**** *RADIATIVE_TRANSFERT*
15 !!
16 !! PURPOSE
17 !! -------
18 !!
19 !! Calculates the fraction of absorbed photosynthetic radiation (FAPAR),
20 !! the fraction of absorbed near-infrared radiation (FAPIR), based on
21 !! the fraction of diffuse and direct radiation (Erbs et al 1982 formulation).
22 !! Calculates also the clumping index and the resulting transmittance
23 !! distinguishing between the upper part of the canopy (SUP) and the rest (INF),
24 !! direct and diffuse radiation, sunlit and shaded leaves.
25 !!
26 !!** METHOD
27 !! ------
28 !! Carrer et al, 2013 (doi:10.1002/jgrg20070)
29 !!
30 !! EXTERNAL
31 !! --------
32 !! none
33 !!
34 !! IMPLICIT ARGUMENTS
35 !! ------------------
36 !!
37 !! USE MODD_CSTS
38 !! USE MODD_CO2V_PAR
39 !! USE MODD_SURF_PAR
40 !! USE MODI_FAPAIR
41 !!
42 !! REFERENCE
43 !! ---------
44 !!
45 !! Carrer et al, 2013 (doi:10.1002/jgrg20070)
46 !!
47 !! AUTHOR
48 !! ------
49 !!
50 !! D. Carrer * Meteo-France *
51 !!
52 !! MODIFICATIONS
53 !! -------------
54 !! Original 04/11
55 !! C. Delire 08/13 : moved calculation of diffuse fraction from fapair to here
56 !! Commented by C. Delire 07/13
57 !!
58 !-------------------------------------------------------------------------------
59 !!
60 USE modd_csts, ONLY : xi0 ! Solar constant
61 USE modd_co2v_par, ONLY : xparcf, xlai_shade, &
62  xxb_sup, xxb_inf, & ! sigma parameter in clumping (Table 1, eq4)
63  xssa_sup, xssa_inf, & ! single scatering albedo (PAR)
64  xssa_sup_pir, xssa_inf_pir ! single scatering albedo (NIR)
65 !
66 USE modd_data_cover_par, ONLY : nvt_c3, nvt_c4, &
67  nvt_irr, nvt_gras
68 !
69 USE modd_surf_par, ONLY : xundef
70 !
71 USE modi_fapair
72 !
73 !* 0. DECLARATIONS
74 ! ------------
75 !
76 !
77 USE yomhook ,ONLY : lhook, dr_hook
78 USE parkind1 ,ONLY : jprb
79 !
80 IMPLICIT NONE
81 !
82 !* 0.1 declarations of arguments
83 !
84 LOGICAL, INTENT(IN) :: oagri_to_grass
85 !
86 REAL, DIMENSION(:,:),INTENT(IN) :: pvegtype ! PVEGTYPE = type de vegetation (1 a 9)
87 !
88 REAL, DIMENSION(:), INTENT(IN) :: palbvis_veg ! visible snow free albedo of vegetation
89 REAL, DIMENSION(:), INTENT(IN) :: palbvis_soil ! visible snow free albedo of soil
90 REAL, DIMENSION(:), INTENT(IN) :: palbnir_veg ! NIR snow free albedo of vegetation
91 REAL, DIMENSION(:), INTENT(IN) :: palbnir_soil ! NIR snow free albedo of soil
92 !
93 REAL,DIMENSION(:), INTENT(IN) :: psw_rad ! incident broadband solar radiation (PAR+NIR)
94 REAL,DIMENSION(:), INTENT(IN) :: plai ! PLAI = leaf area index
95 !
96 REAL,DIMENSION(:), INTENT(IN) :: pzenith ! solar zenith angle needed
97 ! for computation of diffusion of solar
98 ! radiation
99 !
100 REAL,DIMENSION(:), INTENT(INOUT) :: pabc ! normalized canopy height (0=bottom, 1=top)
101 !
102 !
103 REAL, DIMENSION(:), INTENT(INOUT) :: pfaparc !fraction of absorbed photosynthetic active radiation (cumulated over patches)
104 REAL, DIMENSION(:), INTENT(INOUT) :: pfapirc !fraction of absorbed NIR (cumulated)
105 REAL, DIMENSION(:), INTENT(INOUT) :: pmus ! cosine of solar zenith angle (averaged)
106 REAL, DIMENSION(:), INTENT(INOUT) :: plai_effc ! Effective LAI (cumulated)
107 !
108 LOGICAL, DIMENSION(:),INTENT(OUT) :: oshade ! OSHADE = if 1 shading activated
109 REAL, DIMENSION(:,:), INTENT(OUT) :: piacan ! APAR in the canopy at different gauss level
110 REAL, DIMENSION(:,:), INTENT(OUT) :: piacan_sunlit, piacan_shade
111 ! ! absorbed PAR at each level within the
112 ! ! canopy - Split into shaded and SUNLIT
113 REAL, DIMENSION(:,:), INTENT(OUT) :: pfrac_sun ! fraction of sunlit leaves
114 !
115 REAL, DIMENSION(:), INTENT(OUT) :: pfapar, pfapir, pfapar_bs, pfapir_bs
116 !
117 !* 0.2 declarations of local variables
118 !
119 !
120 REAL, DIMENSION(SIZE(PLAI)) :: zia, zlai, zlai_eff, zxmus, zfd_sky
121 ! ZXMUS = cosine of solar zenith angle
122 ! ZFD_SKY = fraction of diffuse radiation in sky
123 REAL, DIMENSION(SIZE(PLAI)) :: zb_inf, zb_sup
124 INTEGER, DIMENSION(1) :: idmax
125 REAL :: ztau, zratio
126 ! ZTAU = exp(-aerosol optical depth taken as 0.1)
127 ! ZRATIO = clearness index K_t eq.1 from Carrer et al
128 INTEGER :: jj, i ! index for loops
129 !
130 REAL(KIND=JPRB) :: zhook_handle
131 !-------------------------------------------------------------------------------
132 !
133 IF (lhook) CALL dr_hook('RADIATIVE_TRANSFERT',0,zhook_handle)
134 !
135 zlai(:) = plai(:)
136 zfd_sky(:) = 0.
137 !
138 WHERE (plai(:)==xundef) zlai(:) = 0.0
139 !
140 ! Geometrical configuration and density of leaves induce different
141 ! min value of LAI to start the shading.
142 oshade(:)= .true.
143 DO jj = 1, SIZE(plai)
144 ! CD value calculated for patch with largest fraction ?
145  idmax = maxloc(pvegtype(jj,:))
146  IF(oagri_to_grass.AND.(idmax(1)==nvt_c3.OR.idmax(1)==nvt_c4.OR.idmax(1)==nvt_irr))idmax(1)=nvt_gras
147  IF (plai(jj).LT.xlai_shade(idmax(1))) oshade(jj) = .false.
148  zb_inf(jj) = xxb_inf(idmax(1))
149  zb_sup(jj) = xxb_sup(idmax(1))
150 ENDDO
151 !
152 !to consider all the tickness of the canopy
153 pabc(1) = 0.
154 !
155 ! cosine of solar zenith angle
156 !
157 zxmus(:) = max(cos(pzenith(:)),0.01)
158 !
159 ! CD Calculation of diffuse fraction done here because depends on solar radiation and not PAR
160 !
161 ztau = exp(-0.1) ! Aerosol Optical Depth fixed at low value (Carrer et al, section 2.1.2 eq. 1)
162 !
163 ! Diffuse fraction based on clearness index (Carrer et la, eq. 1 & 2.)
164 DO i=1,SIZE(plai)
165  IF (psw_rad(i) > 0.) THEN
166  ! estimates fraction of diffuse radiation by Erbs (1982)
167  zratio = psw_rad(i)/xi0/zxmus(i)
168  IF (zratio < 0.22) THEN
169  zfd_sky(i) = (1 - 0.09*zratio)
170  ELSE IF (zratio < 0.8) THEN
171  zfd_sky(i) = (0.9511 + (-0.1604 + (4.388 + (-16.64 + 12.34*zratio)*zratio)*zratio)*zratio)
172  ELSE
173  !!$ PXFD_SKY(I) = PIA(I)*0.165 ! original Erbs formulation
174  !if clear sky, the diffuse fraction depends on aerosol load
175  zfd_sky(i) = (1. - ztau) /(1. - (1.-zxmus(i))*ztau)
176  ENDIF
177  ENDIF
178 END DO
179 !
180 ! NIR calculations
181 zia(:) = psw_rad(:)*(1.-xparcf)
182  CALL fapair(pabc, zfd_sky, zia, zlai, zxmus, xssa_sup_pir, xssa_inf_pir, &
183  zb_sup, zb_inf, palbnir_veg, palbnir_soil, oshade, &
184  pfapir, pfapir_bs )
185 !
186 zia(:) = psw_rad(:)*xparcf
187  CALL fapair(pabc, zfd_sky, zia, zlai, zxmus, xssa_sup, xssa_inf, &
188  zb_sup, zb_inf, palbvis_veg, palbvis_soil, oshade, &
189  pfapar, pfapar_bs, plai_eff=zlai_eff, piacan=piacan, &
190  piacan_shade=piacan_shade, piacan_sunlit=piacan_sunlit, &
191  pfrac_sun=pfrac_sun )
192 !
193 DO jj = 1,SIZE(plai)
194  IF (zia(jj).NE.0.) THEN
195  pfapirc(jj) = pfapirc(jj) + pfapir(jj) * zxmus(jj)
196  pfaparc(jj) = pfaparc(jj) + pfapar(jj) * zxmus(jj)
197  plai_effc(jj) = plai_effc(jj) + zlai_eff(jj) * zxmus(jj)
198  pmus(jj) = pmus(jj) + zxmus(jj)
199  ENDIF
200 ENDDO
201 !
202 IF (lhook) CALL dr_hook('RADIATIVE_TRANSFERT',1,zhook_handle)
203 !
204 END SUBROUTINE radiative_transfert
subroutine fapair(PABC, PFD_SKY, PIA, PLAI, PXMUS, PSSA_SUP, PSSA_INF, PB_SUP, PB_INF, PALB_VEG, PALB_SOIL, OSHADE, PFAPR, PFAPR_BS, PLAI_EFF, PIACAN, PIACAN_SHADE, PIACAN_SUNLIT, PFRAC_SUN)
Definition: fapair.F90:6
subroutine radiative_transfert(OAGRI_TO_GRASS, PVEGTYPE, PALBVIS_VEG, PALBVIS_SOIL, PALBNIR_VEG, PALBNIR_SOIL, PSW_RAD, PLAI, PZENITH, PABC, PFAPARC, PFAPIRC, PMUS, PLAI_EFFC, OSHADE, PIACAN, PIACAN_SUNLIT, PIACAN_SHADE, PFRAC_SUN, PFAPAR, PFAPIR, PFAPAR_BS, PFAPIR_BS)