SURFEX v8.1
General documentation of Surfex
update_rad_water.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_water(W,PZENITH,PTT,PDIR_ALB_ATMOS,PSCA_ALB_ATMOS,PEMIS_ATMOS,PTRAD)
7 ! #######################################################################
8 !
9 !!**** *UPDATE_RAD_WATER * - 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 02/2014 : split from update_rad_seawat.F90
32 !!------------------------------------------------------------------
33 !
34 USE modd_watflux_n, ONLY : watflux_t
35 !
36 USE modd_water_par, ONLY : xemiswat, xemiswatice, &
39 !
40 USE modn_sfx_oasis, ONLY : lwater
41 USE modd_sfx_oasis, ONLY : lcpl_sea
42 !
43 USE modi_albedo_ta96
44 USE modi_albedo_mk10
45 !
46 USE yomhook ,ONLY : lhook, dr_hook
47 USE parkind1 ,ONLY : jprb
48 !
49 IMPLICIT NONE
50 !
51 !* 0.1 declarations of arguments
52 !
53 TYPE(watflux_t), INTENT(INOUT) :: W
54 !
55 REAL, DIMENSION(:), INTENT(IN) :: PZENITH ! Zenithal angle at t+1
56 REAL, INTENT(IN) :: PTT ! Sea/ice transition temperature (different according to sea or inland water)
57 !
58 REAL, DIMENSION(:,:), INTENT(OUT) :: PDIR_ALB_ATMOS ! Direct albedo at t+1 for the atmosphere
59 REAL, DIMENSION(:,:), INTENT(OUT) :: PSCA_ALB_ATMOS ! Diffuse albedo at t+1 for the atmosphere
60 REAL, DIMENSION(:), INTENT(OUT) :: PEMIS_ATMOS ! Emissivity at t+1 for the atmosphere
61 REAL, DIMENSION(:), INTENT(OUT) :: PTRAD ! radiative temp at t+1 for the atmosphere
62 !
63 !* 0.2 declarations of local variables
64 !
65 INTEGER :: JSWB
66 REAL, DIMENSION(SIZE(W%XTS)) :: ZALBEDO
67 REAL(KIND=JPRB) :: ZHOOK_HANDLE
68 !
69 !-------------------------------------------------------------------------------------
70 !
71 IF (lhook) CALL dr_hook('UPDATE_RAD_WATER',0,zhook_handle)
72 !
73 zalbedo(:) = 0.
74 IF (w%CWAT_ALB=='TA96') THEN
75  zalbedo(:) = albedo_ta96(pzenith(:))
76 ELSEIF (w%CWAT_ALB=='MK10') THEN
77  zalbedo(:) = albedo_mk10(pzenith(:))
78 ENDIF
79 !
80 IF(lcpl_sea.AND.lwater)THEN !Earth System Model
81 !
82 !Sea and/or ice albedo already given by oceanic model
83 !Except for Taylor et al (1996) formulation
84 !
85  !
86  WHERE (w%XTS(:)>=ptt )
87  !* open water
88  w%XEMIS (:) = xemiswat
89  ELSEWHERE
90  !* sea ice
91  w%XEMIS (:) = xemiswatice
92  END WHERE
93  !
94  IF (w%CWAT_ALB=='TA96' .OR. w%CWAT_ALB=='MK10') THEN
95  !* Taylor et al 1996
96  !* open water
97  WHERE (w%XTS(:)>=ptt) w%XDIR_ALB(:) = zalbedo(:)
98  WHERE (w%XTS(:)>=ptt) w%XSCA_ALB(:) = xalbsca_wat
99  ENDIF
100  !
101 ELSE
102  !
103  IF (w%CWAT_ALB=='UNIF') THEN
104  !* uniform albedo
105  WHERE (w%XTS(:)>=ptt )
106  !* open water
107  w%XDIR_ALB (:) = xalbwat
108  w%XSCA_ALB (:) = xalbwat
109  w%XEMIS (:) = xemiswat
110  ELSEWHERE
111  !* sea ice
112  w%XDIR_ALB(:) = xalbwatice
113  w%XSCA_ALB(:) = xalbwatice
114  w%XEMIS (:) = xemiswatice
115  END WHERE
116  !
117  ELSE IF (w%CWAT_ALB=='TA96' .OR. w%CWAT_ALB=='MK10') THEN
118  !* Taylor et al 1996
119  WHERE (w%XTS(:)>=ptt) w%XDIR_ALB(:) = zalbedo(:)
120  !
121  WHERE (w%XTS(:)>=ptt)
122  !* open water
123  w%XSCA_ALB (:) = xalbsca_wat
124  w%XEMIS (:) = xemiswat
125  ELSEWHERE
126  !* sea ice
127  w%XDIR_ALB(:) = xalbwatice
128  w%XSCA_ALB(:) = xalbwatice
129  w%XEMIS (:) = xemiswatice
130  END WHERE
131  !
132  ENDIF
133  !
134 ENDIF
135 !
136 !-------------------------------------------------------------------------------------
137 !
138 DO jswb=1,SIZE(pdir_alb_atmos,2)
139  pdir_alb_atmos(:,jswb) = w%XDIR_ALB(:)
140  psca_alb_atmos(:,jswb) = w%XSCA_ALB(:)
141 END DO
142 !
143 pemis_atmos(:) = w%XEMIS(:)
144 ptrad(:) = w%XTS (:)
145 !
146 IF (lhook) CALL dr_hook('UPDATE_RAD_WATER',1,zhook_handle)
147 !
148 !-------------------------------------------------------------------------------------
149 !
150 END SUBROUTINE update_rad_water
151 
real, save xalbwat
real, save xemiswatice
subroutine update_rad_water(W, PZENITH, PTT, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD)
real, save xalbsca_wat
real function, dimension(size(pzenith)) albedo_ta96(PZENITH)
Definition: albedo_ta96.F90:7
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
real, save xalbwatice
real function, dimension(size(pzenith)) albedo_mk10(PZENITH)
Definition: albedo_mk10.F90:7
real, save xemiswat