SURFEX v8.1
General documentation of Surfex
update_rad_sea.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 update_rad_sea(S,PZENITH,PTT,PDIR_ALB_ATMOS,PSCA_ALB_ATMOS,PEMIS_ATMOS,PTRAD,PU,PV)
7 ! #######################################################################
8 !
9 !!**** *UPDATE_RAD_SEA * - update the radiative properties at time t+1 (see by the atmosphere)
10 ! in order to close the energy budget between surfex and the atmosphere
11 
12 !!
13 !! PURPOSE
14 !! -------
15 !
16 !!** METHOD
17 !! ------
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !!
23 !! AUTHOR
24 !! ------
25 !! B. Decharme
26 !!
27 !! MODIFICATIONS
28 !! -------------
29 !! Original 09/2009
30 !! Modified 03/2011 : E. Bazile (MK10) albedo from Marat Khairoutdinov
31 !! Modified 01/2014 : S. Senesi : handle fractional seaice
32 !! Modified 02/2014 : split from update_rad_seawat.F90
33 !! Modified 01/2015 : introduce interactive ocean surface albedo (R.Séférian)
34 !!------------------------------------------------------------------
35 !
36 USE modd_seaflux_n, ONLY : seaflux_t
37 !
38 USE modd_water_par, ONLY : xemiswat, xemiswatice, &
41 !
42 USE modd_sfx_oasis, ONLY : lcpl_sea
43 !
44 USE modi_albedo_ta96
45 USE modi_albedo_mk10
46 USE modi_albedo_rs14
47 !
48 USE yomhook ,ONLY : lhook, dr_hook
49 USE parkind1 ,ONLY : jprb
50 !
51 IMPLICIT NONE
52 !
53 !* 0.1 declarations of arguments
54 !
55 TYPE(seaflux_t), INTENT(INOUT) :: S
56 !
57 REAL, DIMENSION(:), INTENT(IN) :: PZENITH ! Zenithal angle at t+1
58 REAL, INTENT(IN) :: PTT ! Sea/ice transition temperature (different according to sea or inland water)
59 !
60 REAL, DIMENSION(:,:), INTENT(OUT) :: PDIR_ALB_ATMOS ! Direct albedo at t+1 for the atmosphere
61 REAL, DIMENSION(:,:), INTENT(OUT) :: PSCA_ALB_ATMOS ! Diffuse albedo at t+1 for the atmosphere
62 REAL, DIMENSION(:), INTENT(OUT) :: PEMIS_ATMOS ! Emissivity at t+1 for the atmosphere
63 REAL, DIMENSION(:), INTENT(OUT) :: PTRAD ! radiative temp at t+1 for the atmosphere
64 !
65 REAL, DIMENSION(:), INTENT(IN) , OPTIONAL :: PU ! zonal wind (m/s)
66 REAL, DIMENSION(:), INTENT(IN) , OPTIONAL :: PV ! meridian wind (m/s)
67 !
68 !* 0.2 declarations of local variables
69 !
70 INTEGER :: JSWB
71 REAL, DIMENSION(SIZE(PZENITH)) :: ZALBDIR
72 REAL, DIMENSION(SIZE(PZENITH)) :: ZALBSCA
73 REAL, DIMENSION(SIZE(PZENITH)) :: ZWIND
74 !
75 REAL(KIND=JPRB) :: ZHOOK_HANDLE
76 !
77 !-------------------------------------------------------------------------------------
78 !
79 IF (lhook) CALL dr_hook('UPDATE_RAD_SEA',0,zhook_handle)
80 !
81 zalbdir(:) = 0.
82 zalbsca(:) = 0.
83 !
84 IF (s%CSEA_ALB=='TA96') THEN
85 !
86  zalbdir(:) = albedo_ta96(pzenith(:))
87  zalbsca(:) = xalbsca_wat
88 !
89 ELSEIF (s%CSEA_ALB=='MK10') THEN
90 !
91  zalbdir(:) = albedo_mk10(pzenith(:))
92  zalbsca(:) = xalbsca_wat
93 !
94 ELSEIF (s%CSEA_ALB=='RS14') THEN
95 !
96  IF (PRESENT(pu).AND.PRESENT(pv)) THEN
97  zwind(:) = sqrt(pu(:)**2+pv(:)**2)
98  CALL albedo_rs14(pzenith(:),zwind(:),zalbdir(:),zalbsca(:))
99  ELSE
100  zalbdir(:) = s%XDIR_ALB(:)
101  zalbsca(:) = s%XSCA_ALB(:)
102  ENDIF
103 !
104 ENDIF
105 !
106 IF(lcpl_sea)THEN !Earth System Model
107 !
108 !Sea and/or ice albedo already given by coupled seaice model
109 !Except for Taylor et al (1996) and MK10 formulation
110 !
111  WHERE (s%XSST(:)>=ptt )
112  !* open water
113  s%XEMIS (:) = xemiswat
114  ELSEWHERE
115  !* sea ice
116  s%XEMIS (:) = xemiswatice
117  END WHERE
118  !
119  IF (s%CSEA_ALB=='TA96' .OR. s%CSEA_ALB=='MK10' .OR. s%CSEA_ALB=='RS14') THEN
120  !* Taylor et al 1996
121  !* open water
122  WHERE (s%XSST(:)>=ptt) s%XDIR_ALB(:) = zalbdir(:)
123  WHERE (s%XSST(:)>=ptt) s%XSCA_ALB(:) = zalbsca(:)
124  ENDIF
125  !
126 ELSEIF(s%LHANDLE_SIC) THEN
127  ! Returned values are an average of open sea and seaice properties
128  ! weighted by the seaice cover
129  s%XEMIS (:) = ( 1 - s%XSIC(:)) * xemiswat + s%XSIC(:) * xemiswatice
130  IF (s%CSEA_ALB=='UNIF') THEN
131  s%XDIR_ALB(:) = ( 1 - s%XSIC(:)) * xalbwat + s%XSIC(:) * s%XICE_ALB(:)
132  s%XSCA_ALB(:) = ( 1 - s%XSIC(:)) * xalbwat + s%XSIC(:) * s%XICE_ALB(:)
133  ELSE IF (s%CSEA_ALB=='TA96' .OR. s%CSEA_ALB=='MK10' .OR. s%CSEA_ALB=='RS14') THEN
134  s%XDIR_ALB(:) = ( 1 - s%XSIC(:)) * zalbdir(:) + s%XSIC(:) * s%XICE_ALB(:)
135  s%XSCA_ALB(:) = ( 1 - s%XSIC(:)) * zalbsca(:) + s%XSIC(:) * s%XICE_ALB(:)
136  ENDIF
137 ELSE
138  !
139  IF (s%CSEA_ALB=='UNIF') THEN
140  !* uniform albedo
141  WHERE (s%XSST(:)>=ptt )
142  !* open water
143  s%XDIR_ALB (:) = xalbwat
144  s%XSCA_ALB (:) = xalbwat
145  s%XEMIS (:) = xemiswat
146  ELSEWHERE
147  !* sea ice
148  s%XDIR_ALB(:) = xalbseaice
149  s%XSCA_ALB(:) = xalbseaice
150  s%XEMIS (:) = xemiswatice
151  END WHERE
152  !
153  ELSE IF (s%CSEA_ALB=='TA96' .OR. s%CSEA_ALB=='MK10' .OR. s%CSEA_ALB=='RS14') THEN
154  !* Taylor et al 1996
155  !
156  WHERE (s%XSST(:)>=ptt)
157  !* open water
158  s%XDIR_ALB (:) = zalbdir(:)
159  s%XSCA_ALB (:) = zalbsca(:)
160  s%XEMIS (:) = xemiswat
161  ELSEWHERE
162  !* sea ice
163  s%XDIR_ALB(:) = xalbseaice
164  s%XSCA_ALB(:) = xalbseaice
165  s%XEMIS (:) = xemiswatice
166  END WHERE
167  !
168  ENDIF
169  !
170 ENDIF
171 !
172 !-------------------------------------------------------------------------------------
173 !
174 DO jswb=1,SIZE(pdir_alb_atmos,2)
175  pdir_alb_atmos(:,jswb) = s%XDIR_ALB(:)
176  psca_alb_atmos(:,jswb) = s%XSCA_ALB(:)
177 END DO
178 !
179 pemis_atmos(:) = s%XEMIS(:)
180 IF(s%LHANDLE_SIC) THEN
181  ptrad(:) = (((1 - s%XSIC(:)) * xemiswat * s%XSST (:)**4 + &
182  s%XSIC(:) * xemiswatice * s%XTICE(:)**4)/ &
183  s%XEMIS(:)) ** 0.25
184 ELSE
185  ptrad(:) = s%XSST (:)
186 END IF
187 !
188 IF (lhook) CALL dr_hook('UPDATE_RAD_SEA',1,zhook_handle)
189 !
190 !-------------------------------------------------------------------------------------
191 !
192 END SUBROUTINE update_rad_sea
193 
real, save xalbwat
subroutine albedo_rs14(PZENITH, PWIND, PDIR_ALB, PSCA_ALB)
Definition: albedo_rs14.F90:7
real, save xalbseaice
real, save xemiswatice
real, save xalbsca_wat
real function, dimension(size(pzenith)) albedo_ta96(PZENITH)
Definition: albedo_ta96.F90:7
integer, parameter jprb
Definition: parkind1.F90:32
subroutine update_rad_sea(S, PZENITH, PTT, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD, PU, PV)
logical lhook
Definition: yomhook.F90:15
real function, dimension(size(pzenith)) albedo_mk10(PZENITH)
Definition: albedo_mk10.F90:7
real, save xemiswat