SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
update_rad_flake.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_flake(HALB,PTS,PZENITH,PH_ICE,PH_SNOW,PICE_ALB,PSNOW_ALB, &
7  pdir_alb,psca_alb,pemis,pdir_alb_atmos,psca_alb_atmos,&
8  pemis_atmos,ptrad )
9 ! #######################################################################
10 !
11 !!**** *UPDATE_RAD_FLAKE * - update the radiative properties at time t+1 (see by the atmosphere)
12 ! in order to close the energy budget between surfex and the atmosphere
13 
14 !!
15 !! PURPOSE
16 !! -------
17 !
18 !!** METHOD
19 !! ------
20 !!
21 !! REFERENCE
22 !! ---------
23 !!
24 !!
25 !! AUTHOR
26 !! ------
27 !! B. Decharme
28 !!
29 !! MODIFICATIONS
30 !! -------------
31 !! Original 04/2013
32 !!------------------------------------------------------------------
33 !
34 USE modd_water_par, ONLY : xalbsca_wat, xalbwat, xemiswat, xemiswatice
35 !
36 USE modd_flake_parameters , ONLY : h_snow_min_flk, h_ice_min_flk
37 !
38 USE modd_snow_par, ONLY : xemissn
39 !
40 USE modi_albedo_ta96
41 USE modi_albedo_mk10
42 !
43 USE yomhook ,ONLY : lhook, dr_hook
44 USE parkind1 ,ONLY : jprb
45 !
46 IMPLICIT NONE
47 !
48 !* 0.1 declarations of arguments
49 !
50  CHARACTER(LEN=4), INTENT(IN) :: halb
51 !
52 REAL, DIMENSION(:), INTENT(IN) :: pts ! surface temperature
53 REAL, DIMENSION(:), INTENT(IN) :: pzenith ! Zenithal angle at t+1
54 REAL, DIMENSION(:), INTENT(IN) :: ph_ice ! ice depth at t+
55 REAL, DIMENSION(:), INTENT(IN) :: ph_snow ! snow depth at t+
56 REAL, DIMENSION(:), INTENT(IN) :: pice_alb ! ice albedo at t+
57 REAL, DIMENSION(:), INTENT(IN) :: psnow_alb ! snow albedo at t+
58 !
59 REAL, DIMENSION(:), INTENT(INOUT):: pdir_alb ! Direct albedo at t+1
60 REAL, DIMENSION(:), INTENT(INOUT):: psca_alb ! Diffuse albedo at t+1
61 REAL, DIMENSION(:), INTENT(OUT) :: pemis ! emissivity (soil+vegetation) at t+1
62 !
63 REAL, DIMENSION(:,:), INTENT(OUT) :: pdir_alb_atmos ! Direct albedo at t+1 for the atmosphere
64 REAL, DIMENSION(:,:), INTENT(OUT) :: psca_alb_atmos ! Diffuse albedo at t+1 for the atmosphere
65 REAL, DIMENSION(:), INTENT(OUT) :: pemis_atmos ! Emissivity at t+1 for the atmosphere
66 REAL, DIMENSION(:), INTENT(OUT) :: ptrad ! radiative temp at t+1 for the atmosphere
67 !
68 !* 0.2 declarations of local variables
69 !
70 INTEGER :: jswb
71 !
72 REAL, DIMENSION(SIZE(PTS)) :: zalbdir
73 REAL, DIMENSION(SIZE(PTS)) :: zalbsca
74 !
75 REAL(KIND=JPRB) :: zhook_handle
76 !
77 !-------------------------------------------------------------------------------------
78 !
79 IF (lhook) CALL dr_hook('UPDATE_RAD_FLAKE',0,zhook_handle)
80 !
81 zalbdir(:) = 0.
82 zalbsca(:) = 0.
83 !
84 IF (halb=='TA96') THEN
85  zalbdir(:) = albedo_ta96(pzenith(:))
86  zalbsca(:) = xalbsca_wat
87 ELSEIF (halb=='MK10') THEN
88  zalbdir(:) = albedo_mk10(pzenith(:))
89  zalbsca(:) = xalbsca_wat
90 ELSE
91  zalbdir(:) = xalbwat
92  zalbsca(:) = xalbwat
93 ENDIF
94 !
95 WHERE (ph_snow(:)>=h_snow_min_flk)
96 !* snow
97  pdir_alb(:) = psnow_alb(:)
98  psca_alb(:) = psnow_alb(:)
99  pemis(:) = xemissn
100 ELSEWHERE(ph_ice(:)>=h_ice_min_flk)
101 !* ice
102  pdir_alb(:) = pice_alb(:)
103  psca_alb(:) = pice_alb(:)
104  pemis(:) = xemiswatice
105 ELSEWHERE
106 !* open water
107  pdir_alb(:) = zalbdir(:)
108  psca_alb(:) = zalbsca(:)
109  pemis(:) = xemiswat
110 END WHERE
111 !
112 !-------------------------------------------------------------------------------------
113 !
114 DO jswb=1,SIZE(pdir_alb_atmos,2)
115  pdir_alb_atmos(:,jswb) = pdir_alb(:)
116  psca_alb_atmos(:,jswb) = psca_alb(:)
117 END DO
118 !
119 pemis_atmos(:) = pemis(:)
120 ptrad(:) = pts(:)
121 !
122 IF (lhook) CALL dr_hook('UPDATE_RAD_FLAKE',1,zhook_handle)
123 !
124 !-------------------------------------------------------------------------------------
125 !
126 END SUBROUTINE update_rad_flake
127 
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
subroutine update_rad_flake(HALB, PTS, PZENITH, PH_ICE, PH_SNOW, PICE_ALB, PSNOW_ALB, PDIR_ALB, PSCA_ALB, PEMIS, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD)