SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
ccetr_pair.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 !
7  SUBROUTINE ccetr_pair(KNIV, PABC, PABC_SUP, PIA, PXMUS, PB_DR, POMEGA_DR,&
8  pomega_df, pb_df, plai, palb_veg, palb_soil, &
9  pfd_sky, pfd_veg, ptr, pxia, plai_eff )
10 
11 !
12 !!*** *CCETR_PAIR* ***
13 !!
14 !! PURPOSE
15 !! -------
16 !! Calculates radiative transfer within the canopy
17 !!
18 !!** METHOD
19 !! ------
20 !! Carrer et al.
21 !!
22 !! EXTERNAL
23 !! --------
24 !! none
25 !!
26 !! IMPLICIT ARGUMENTS
27 !! ------------------
28 !! USE MODD_CO2V_PAR
29 !!
30 !! REFERENCE
31 !! ---------
32 !! Carrer et al. 2013
33 !!
34 !! AUTHOR
35 !! ------
36 !! D. Carrer * Meteo-France *
37 !!
38 !! MODIFICATIONS
39 !! -------------
40 !! Original 01/04/11
41 !! LAI_EFF corrected 07/2013
42 !-------------------------------------------------------------------------------
43 !
44 USE modd_csts, ONLY : xi0
45 !
46 USE yomhook ,ONLY : lhook, dr_hook
47 USE parkind1 ,ONLY : jprb
48 !
49 !* 0. DECLARATIONS
50 ! ------------
51 !
52 IMPLICIT NONE
53 !
54 !* 0.1 declarations of arguments
55 !
56 INTEGER, INTENT(IN) :: kniv ! layer number from 10 (top of canopy) to 1 (bottom)
57 REAL, INTENT(IN) :: pabc ! normalized height units of the considered layer and the one above
58 REAL, INTENT(IN) :: pabc_sup ! cumulated canopy height (0 at the bottom, 1 at the top)
59 REAL, INTENT(IN) :: pb_df ! single_scattering albedo of considered leaf layer for diffuse rad.
60 REAL, DIMENSION(:), INTENT(IN) :: pia ! incident PAR or NIR
61 REAL, DIMENSION(:), INTENT(IN) :: pxmus ! cosine of solar zenith angle
62 REAL, DIMENSION(:), INTENT(IN) :: pb_dr ! single_scattering albedo of considered leaf layer for direct rad.
63 REAL, DIMENSION(:), INTENT(IN) :: pomega_dr !
64 REAL, DIMENSION(:), INTENT(IN) :: pomega_df !
65 REAL, DIMENSION(:), INTENT(IN) :: plai ! leaf area index
66 REAL, DIMENSION(:), INTENT(IN) :: palb_veg ! vegetation albedo in PAR or NIR
67 REAL, DIMENSION(:), INTENT(IN) :: palb_soil ! soil albedo in PAR or NIR
68 REAL, DIMENSION(:), INTENT(IN) :: pfd_sky ! fraction of incident diffuse radiation at top of canopy
69 !
70 REAL, DIMENSION(:), INTENT(INOUT) :: pfd_veg ! fraction of incident diffuse radiation at top of considered canopy layer
71 REAL, DIMENSION(:), INTENT(INOUT) :: ptr ! fraction of transmited radiation
72 !
73 REAL, DIMENSION(:), INTENT(OUT) :: pxia ! fraction of abs. radiation of veg
74 REAL, DIMENSION(:), INTENT(OUT) :: plai_eff ! LAI effective
75 !
76 !* 0.2 declarations of local variables
77 
78 !
79 REAL, DIMENSION(SIZE(PLAI)) :: zslai_tru, zfd_veg, ztdf, zidr, &
80  zidf, zabc, zabc_sup, zb_df, zgt
81 ! ZIDF = interception of diffusion
82 ! ZIDR = direct interception
83 ! XB_DR = DH albedo of upper/lower layers
84 REAL :: zgt_sup, zgt_inf
85 INTEGER :: i
86 !
87 REAL(KIND=JPRB) :: zhook_handle
88 !
89 !-----------------------------------------------------------------------
90 !
91 IF (lhook) CALL dr_hook('CCETR_PAIR',0,zhook_handle)
92 !
93 plai_eff(:) = 0.
94 !
95 !Angular projection of the leaves
96 ! 0.5 : spherical distribution
97 ! (2./!PI)*sin(zs*!Dtor) : vertical distribution
98 ! cos(zs*!Dtor) : horizontal distribution
99 zgt_sup = 0.5
100 zgt_inf = 0.5
101 !
102 IF (pabc.GT.0.8) THEN
103  zgt(:) = zgt_sup
104 ELSE
105  zgt(:) = zgt_inf
106 ENDIF
107 !
108 zabc(:) = pabc
109 zabc_sup(:) = pabc_sup
110 zb_df(:) = pb_df
111 !
112 IF (pabc.GT.0.8) THEN
113  DO i=1,SIZE(pia)
114  IF (pia(i)>0.) THEN
115  ! diffuse fraction due to vegetation
116  zfd_veg(i) = exp(-(1.-zabc(i))*pomega_dr(i)*plai(i))
117  zfd_veg(i) = (1. - zfd_veg(i)) / (1. - (1.-pxmus(i))*zfd_veg(i))
118  pfd_veg(i) = min(zfd_veg(i) + pfd_sky(i),1.)
119  ENDIF
120  ENDDO
121 ENDIF
122 !
123 DO i=1,SIZE(pia)
124  IF (pia(i)>0.) THEN
125  zslai_tru(i) = (zabc_sup(i)-zabc(i))*plai(i)
126  !PLAI_EFF(I) = POMEGA_DR(I)*ZSLAI_TRU(I)
127  ! transmittance of direct beam
128  zidr(i) = exp(-zgt(i)*pb_dr(i)*pomega_dr(i)*zslai_tru(i)/pxmus(i))
129  ! transmittance of diffuse beam
130  zidf(i) = exp(-zb_df(i)*pomega_df(i)*zslai_tru(i))
131  plai_eff(i) = ((1.-pfd_veg(i))*pomega_dr(i)+pfd_veg(i)*pomega_df(i))*zslai_tru(i)
132  !
133  ptr(i) = ((1.-pfd_veg(i))*zidr(i) + pfd_veg(i)*zidf(i))*ptr(i)
134  ENDIF
135 ENDDO
136 !
137 !
138 ! transmissivity of upper layers
139 !
140 pxia(:) = 0.
141 WHERE (pia(:)>0.) pxia(:) = (1-palb_veg(:))*(1.-ptr(:))*pia(:)
142 !
143 IF (kniv .EQ. 1) THEN
144  DO i=1,SIZE(pia)
145  IF (pia(i)>0.) THEN
146  ! -- reflection of surface ---
147  ! transmittance diffuse up - all layer
148  ztdf(i) = exp(-zb_df(i)*pomega_df(i)*(1.-zabc(i))*plai(i))
149  pxia(i)= pxia(i) + (1.-palb_veg(i))*(1.-palb_veg(i))*palb_soil(i)*(1.-ztdf(i))*ptr(i)*pia(i)
150  ENDIF
151  ENDDO
152 ENDIF
153 !
154 IF (lhook) CALL dr_hook('CCETR_PAIR',1,zhook_handle)
155 !
156 END SUBROUTINE ccetr_pair
157 
subroutine ccetr_pair(KNIV, PABC, PABC_SUP, PIA, PXMUS, PB_DR, POMEGA_DR, POMEGA_DF, PB_DF, PLAI, PALB_VEG, PALB_SOIL, PFD_SKY, PFD_VEG, PTR, PXIA, PLAI_EFF)
Definition: ccetr_pair.F90:7