SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
albedo_rs14.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 albedo_rs14(PZENITH,PWIND,PDIR_ALB,PSCA_ALB)
7 ! ##################################################################
8 !
9 !!**** *ALBEDO_RS14*
10 !!
11 !! PURPOSE
12 !! -------
13 ! computes the direct & diffuse albedo over open water
14 !
15 !
16 !!** METHOD
17 !! ------
18 !
19 !! EXTERNAL
20 !! --------
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! R. Séférian * Meteo-France *
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 03/2014
37 ! 05/2014 R. Séférian & B. Decharme :: Adaptation to spectral
38 ! computation for diffuse and direct albedo
39 ! 09/2014 R. Séférian & B. Sunghye :: Adaptation to spectral
40 ! bands compatible with 6-bands RRTM radiative code
41 !
42 !-------------------------------------------------------------------------------
43 !
44 !* DECLARATIONS
45 ! ------------
46 !
48 USE modd_csts, ONLY : xpi
49 !
50 USE yomhook ,ONLY : lhook, dr_hook
51 USE parkind1 ,ONLY : jprb
52 !
53 IMPLICIT NONE
54 !
55 !* 0.1 declarations of arguments
56 ! -------------------------
57 !
58 REAL, DIMENSION(:), INTENT(IN) :: pzenith ! zenithal angle (radian)
59 REAL, DIMENSION(:), INTENT(IN) :: pwind ! surface wind (m s-1)
60 REAL, DIMENSION(:), INTENT(OUT) :: pdir_alb ! direct ocean surface albedo
61 REAL, DIMENSION(:), INTENT(OUT) :: psca_alb ! diffuse ocean surface albedo
62 !
63 !* 0.2 declarations of local variables
64 ! -------------------------
65 !
66 REAL, DIMENSION(SIZE(PZENITH)) :: zchl ! surface chlorophyll
67 REAL, DIMENSION(SIZE(PZENITH)) :: zdir_alb ! direct ocean surface albedo (spectral)
68 REAL, DIMENSION(SIZE(PZENITH)) :: zsca_alb ! diffuse ocean surface albedo (spectral)
69 !
70 INTEGER :: ji, jwl ! indexes
71 REAL :: zwl ! input parameter: wavelength and diffuse/direct fraction of light
72 REAL:: zsig, zrefm, zxx2, zr00, zrr0, zrrr ! computation variables
73 REAL:: zr22, zue, zue2, zr11df, zalbt, zfwc ! computation variables
74 REAL:: zchlabs, zaw, zbw, zap, zylmd, zbp550 ! computation variables
75 REAL:: zbbp, znu, zhb ! computation variables
76 REAL:: zcoszen ! Cosine of the zenith solar angle
77 REAL:: zr11, zrw, zrwdf, zrdf ! 4 components of the OSA
78 
79 !
80 REAL :: zwork ! dummy variable
81 !
82 REAL(KIND=JPRB) :: zhook_handle
83 !
84 !-------------------------------------------------------------------------------
85 !
86 IF (lhook) CALL dr_hook('ALBEDO_RS14',0,zhook_handle)
87 !
88 ! Initiliazing :
89 !
90 pdir_alb(:) = 0.
91 psca_alb(:) = 0.
92 !
93 zdir_alb(:) = 0.
94 zsca_alb(:) = 0.
95 !
96 !
97 zchl(:) = 0.05 ! averaged global values for surface chlorophyll
98  ! need to include bgc coupling in earth system model configuration
99 !
100 DO jwl=1,nnwl ! loop over the wavelength
101 !
102  DO ji=1,SIZE(pzenith) ! loop over the grid points
103 
104  !---------------------------------------------------------------------------------
105  ! 0- Compute baseline values
106  !---------------------------------------------------------------------------------
107  ! Get refractive index for the correspoding wavelength
108  zwl=xakwl(jwl)
109  zrefm= xakrefm(jwl)
110  !
111  ! compute the cosine of the solar zenith angle
112  zcoszen = max(cos(pzenith(ji)),0.)
113  ! Compute sigma derived from wind speed (Cox & Munk reflectance model)
114  zsig=sqrt(0.003+0.00512*pwind(ji))
115  !
116  !---------------------------------------------------------------------------------
117  ! 1- Compute direct surface albedo (ZR11)
118  !---------------------------------------------------------------------------------
119  zxx2=sqrt(1.0-(1.0-zcoszen**2)/zrefm**2)
120  zrr0=0.50*(((zxx2-zrefm*zcoszen)/(zxx2+zrefm*zcoszen))**2 +((zcoszen-zrefm*zxx2)/(zcoszen+zrefm*zxx2))**2)
121  zrrr=0.50*(((zxx2-1.34*zcoszen)/(zxx2+1.34*zcoszen))**2 +((zcoszen-1.34*zxx2)/(zcoszen+1.34*zxx2))**2)
122  zr11=zrr0-(0.0152-1.7873*zcoszen+6.8972*zcoszen**2-8.5778*zcoszen**3+4.071*zsig-7.6446*zcoszen*zsig) &
123  & * exp(0.1643-7.8409*zcoszen-3.5639*zcoszen**2-2.3588*zsig+10.0538*zcoszen*zsig)*zrr0/zrrr
124  !
125  !---------------------------------------------------------------------------------
126  ! 2- Compute surface diffuse albedo (ZRDF)
127  !---------------------------------------------------------------------------------
128  ! Diffuse albedo from Jin et al., 2006 + estimation from diffuse fraction of
129  ! light (relying later on AOD)
130  ! old: ZRDF=-0.1482-0.012*ZSIG+0.1609*ZREFM-0.0244*ZSIG*ZREFM ! surface diffuse (Eq 5a)
131  zrdf = -0.1479 + 0.1502*zrefm - 0.0176*zsig*zrefm ! surface diffuse (Eq 5b)
132  !
133  !---------------------------------------------------------------------------------
134  ! *- Determine absorption and backscattering
135  ! coefficients to determine reflectance below the surface (Ro) once for all
136  !
137  ! *.1- Absorption by chlorophyll
138  zchlabs= xakachl(jwl)
139  ! *.2- Absorption by seawater
140  zaw= xakaw3(jwl)
141  ! *.3- Backscattering by seawater
142  zbw= xakbw(jwl)
143  ! *.4- Backscattering by chlorophyll
144  zylmd = exp(0.014*(440.0-zwl))
145  zwork= exp(log(zchl(ji))*0.65)
146  zap = 0.06*zchlabs*zwork +0.2*(xaw440+0.06*zwork)*zylmd
147  zbp550 = 0.416 * exp(log(zchl(ji))*0.766)
148  !
149  IF ( zchl(ji) > 2. ) THEN
150  znu=0.
151  ELSE
152  IF ( zchl(ji) > 0.02 ) THEN
153  zwork=log10(max(min(zchl(ji),2.),0.02))
154  znu=0.5*(zwork-0.3)
155  zbbp=(0.002+0.01*(0.5-0.25*zwork)*(zwl/550.)**znu)*zbp550
156  ELSE
157  zbbp=0.019*(550./zwl)*zbp550 !ZBBPf=0.0113 at chl<=0.02
158  ENDIF
159  ENDIF
160  !
161  ! Morel-Gentili(1991), Eq (12)
162  ! ZHB=h/(h+2*ZBBPf*(1.-h))
163  zhb=0.5*zbw/(0.5*zbw+zbbp)
164  !
165  !---------------------------------------------------------------------------------
166  ! 3- Compute direct water-leaving albedo (ZRW)
167  !---------------------------------------------------------------------------------
168  ! Based on Morel & Gentilli 1991 parametrization
169  zr22=0.48168549-0.014894708*zsig-0.20703885*zsig**2
170  ! Use Morel 91 formula to compute the direct reflectance
171  ! below the surface
172  zr00=(0.5*zbw+zbbp)/(zaw+zap) *(0.6279-0.2227*zhb-0.0513*zhb**2 + (-0.3119+0.2465*zhb)*zcoszen)
173  ! ZRW=ZR00*(1.-ZR22)*(1.-ZR11)/(1.-ZR00*ZR22)
174  zrw=zr00*(1.-zr22)/(1.-zr00*zr22) ! accurate formulation
175  !
176  !---------------------------------------------------------------------------------
177  ! 4- Compute diffuse water-leaving albedo (ZRWDF)
178  !---------------------------------------------------------------------------------
179  ! as previous water-leaving computation but assumes a uniform incidence of
180  ! shortwave at surface (ue)
181  zue=0.676 ! equivalent u_unif for diffuse incidence
182  zue2=sqrt(1.0-(1.0-zue**2)/zrefm**2)
183  zrr0=0.50*(((zue2-zrefm*zue)/(zue2+zrefm*zue))**2 +((zue-zrefm*zue2)/(zue+zrefm*zue2))**2)
184  zrrr=0.50*(((zue2-1.34*zue)/(zue2+1.34*zue))**2 +((zue-1.34*zue2)/(zue+1.34*zue2))**2)
185  zr11df=zrr0-(0.0152-1.7873*zue+6.8972*zue**2-8.5778*zue**3+4.071*zsig-7.6446*zue*zsig) &
186  & * exp(0.1643-7.8409*zue-3.5639*zue**2-2.3588*zsig+10.0538*zue*zsig)*zrr0/zrrr
187  ! Use Morel 91 formula to compute the diffuse
188  ! reflectance below the surface
189  zr00=(0.5*zbw+zbbp)/(zaw+zap) *(0.6279-0.2227*zhb-0.0513*zhb**2 + (-0.3119+0.2465*zhb)*zue)
190  zrwdf=zr00*(1.-zr22)*(1.-zr11df)/(1.-zr00*zr22)
191  !
192  ! original : correction for foam Monahanand and Muircheartaigh (1980) Eq 16-17
193  ! new: Salisbury 2014 eq(2) at 37GHz, value in fraction
194  zfwc=3.97e-4*pwind(ji)**(1.59)
195  ! has to be update once we have information from wave model (discussion with G. Madec)
196  !
197  ! --------------------------------------------------------------------
198  ! *- OSA estimation
199  ! --------------------------------------------------------------------
200  ! partitionning direct and diffuse albedo
201  !
202  zdir_alb(ji) = zdir_alb(ji) + xfrwl(jwl) *((1.-zfwc) * (zr11+zrw ) + zfwc*xrwc(jwl))
203  zsca_alb(ji) = zsca_alb(ji) + xfrwl(jwl) *((1.-zfwc) * (zrdf+zrwdf) + zfwc*xrwc(jwl))
204  !
205  ENDDO ! end of the loop over grid points
206  !
207 ENDDO ! ending loop over wavelengths
208 !
209 ! --------------------------------------------------------------------
210 ! *- OSA estimation
211 ! --------------------------------------------------------------------
212 !
213 pdir_alb(:)=zdir_alb(:)
214 psca_alb(:)=zsca_alb(:)
215 !
216 IF (lhook) CALL dr_hook('ALBEDO_RS14',1,zhook_handle)
217 !
218 !-------------------------------------------------------------------------------
219 !
220 END SUBROUTINE albedo_rs14
subroutine albedo_rs14(PZENITH, PWIND, PDIR_ALB, PSCA_ALB)
Definition: albedo_rs14.F90:6