SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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(HALB,PSST,PZENITH,PTT,PEMIS,PDIR_ALB,PSCA_ALB, &
7  pdir_alb_atmos,psca_alb_atmos,pemis_atmos,ptrad)
8 ! #######################################################################
9 !
10 !!**** *UPDATE_RAD_WATER * - update the radiative properties at time t+1 (see by the atmosphere)
11 ! in order to close the energy budget between surfex and the atmosphere
12 
13 !!
14 !! PURPOSE
15 !! -------
16 !
17 !!** METHOD
18 !! ------
19 !!
20 !! REFERENCE
21 !! ---------
22 !!
23 !!
24 !! AUTHOR
25 !! ------
26 !! B. Decharme
27 !!
28 !! MODIFICATIONS
29 !! -------------
30 !! Original 09/2009
31 !! Modified 03/2011 : E. Bazile (MK10) albedo from Marat Khairoutdinov
32 !! Modified 02/2014 : split from update_rad_seawat.F90
33 !!------------------------------------------------------------------
34 !
35 USE modd_water_par, ONLY : xemiswat, xemiswatice, &
36  xalbwat, xalbsca_wat, &
37  xalbwatice
38 !
39 USE modn_sfx_oasis, ONLY : lwater
40 USE modd_sfx_oasis, ONLY : lcpl_sea
41 !
42 USE modi_albedo_ta96
43 USE modi_albedo_mk10
44 !
45 USE yomhook ,ONLY : lhook, dr_hook
46 USE parkind1 ,ONLY : jprb
47 !
48 IMPLICIT NONE
49 !
50 !* 0.1 declarations of arguments
51 !
52  CHARACTER(LEN=4), INTENT(IN) :: halb
53 !
54 REAL, DIMENSION(:), INTENT(IN) :: psst ! Sea surface temperature
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(INOUT):: pdir_alb ! Direct albedo at t+1
59 REAL, DIMENSION(:), INTENT(INOUT):: psca_alb ! Diffuse albedo at t+1
60 REAL, DIMENSION(:), INTENT(OUT) :: pemis ! emissivity (soil+vegetation) at t+1
61 !
62 REAL, DIMENSION(:,:), INTENT(OUT) :: pdir_alb_atmos ! Direct albedo at t+1 for the atmosphere
63 REAL, DIMENSION(:,:), INTENT(OUT) :: psca_alb_atmos ! Diffuse albedo at t+1 for the atmosphere
64 REAL, DIMENSION(:), INTENT(OUT) :: pemis_atmos ! Emissivity at t+1 for the atmosphere
65 REAL, DIMENSION(:), INTENT(OUT) :: ptrad ! radiative temp at t+1 for the atmosphere
66 !
67 !* 0.2 declarations of local variables
68 !
69 INTEGER :: jswb
70 REAL, DIMENSION(SIZE(PSST)) :: zalbedo
71 REAL(KIND=JPRB) :: zhook_handle
72 !
73 !-------------------------------------------------------------------------------------
74 !
75 IF (lhook) CALL dr_hook('UPDATE_RAD_WATER',0,zhook_handle)
76 !
77 zalbedo(:) = 0.
78 IF (halb=='TA96') THEN
79  zalbedo(:) = albedo_ta96(pzenith(:))
80 ELSEIF (halb=='MK10') THEN
81  zalbedo(:) = albedo_mk10(pzenith(:))
82 ENDIF
83 !
84 IF(lcpl_sea.AND.lwater)THEN !Earth System Model
85 !
86 !Sea and/or ice albedo already given by oceanic model
87 !Except for Taylor et al (1996) formulation
88 !
89  !
90  WHERE (psst(:)>=ptt )
91  !* open water
92  pemis(:) = xemiswat
93  ELSEWHERE
94  !* sea ice
95  pemis(:) = xemiswatice
96  END WHERE
97  !
98  IF (halb=='TA96' .OR. halb=='MK10') THEN
99  !* Taylor et al 1996
100  !* open water
101  WHERE (psst(:)>=ptt) pdir_alb(:) = zalbedo(:)
102  WHERE (psst(:)>=ptt) psca_alb(:) = xalbsca_wat
103  ENDIF
104  !
105 ELSE
106  !
107  IF (halb=='UNIF') THEN
108  !* uniform albedo
109  WHERE (psst(:)>=ptt )
110  !* open water
111  pdir_alb(:) = xalbwat
112  psca_alb(:) = xalbwat
113  pemis(:) = xemiswat
114  ELSEWHERE
115  !* sea ice
116  pdir_alb(:) = xalbwatice
117  psca_alb(:) = xalbwatice
118  pemis(:) = xemiswatice
119  END WHERE
120  !
121  ELSE IF (halb=='TA96' .OR. halb=='MK10') THEN
122  !* Taylor et al 1996
123  WHERE (psst(:)>=ptt) pdir_alb(:) = zalbedo(:)
124  !
125  WHERE (psst(:)>=ptt)
126  !* open water
127  psca_alb(:) = xalbsca_wat
128  pemis(:) = xemiswat
129  ELSEWHERE
130  !* sea ice
131  pdir_alb(:) = xalbwatice
132  psca_alb(:) = xalbwatice
133  pemis(:) = xemiswatice
134  END WHERE
135  !
136  ENDIF
137  !
138 ENDIF
139 !
140 !-------------------------------------------------------------------------------------
141 !
142 DO jswb=1,SIZE(pdir_alb_atmos,2)
143  pdir_alb_atmos(:,jswb) = pdir_alb(:)
144  psca_alb_atmos(:,jswb) = psca_alb(:)
145 END DO
146 !
147 pemis_atmos(:) = pemis(:)
148 ptrad(:) = psst(:)
149 !
150 IF (lhook) CALL dr_hook('UPDATE_RAD_WATER',1,zhook_handle)
151 !
152 !-------------------------------------------------------------------------------------
153 !
154 END SUBROUTINE update_rad_water
155 
subroutine update_rad_water(HALB, PSST, PZENITH, PTT, PEMIS, PDIR_ALB, PSCA_ALB, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD)
real function, dimension(size(pzenith)) albedo_ta96(PZENITH)
Definition: albedo_ta96.F90:6
real function, dimension(size(pzenith)) albedo_mk10(PZENITH)
Definition: albedo_mk10.F90:6