SURFEX v8.1
General documentation of Surfex
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(F,PZENITH,PDIR_ALB_ATMOS,PSCA_ALB_ATMOS,PEMIS_ATMOS,PTRAD )
7 ! #######################################################################
8 !
9 !!**** *UPDATE_RAD_FLAKE * - 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 04/2013
30 !!------------------------------------------------------------------
31 !
32 USE modd_flake_n, ONLY : flake_t
33 !
35 !
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 TYPE(flake_t), INTENT(INOUT) :: F
51 REAL, DIMENSION(:), INTENT(IN) :: PZENITH ! Zenithal angle at t+1
52 REAL, DIMENSION(:,:), INTENT(OUT) :: PDIR_ALB_ATMOS ! Direct albedo at t+1 for the atmosphere
53 REAL, DIMENSION(:,:), INTENT(OUT) :: PSCA_ALB_ATMOS ! Diffuse albedo at t+1 for the atmosphere
54 REAL, DIMENSION(:), INTENT(OUT) :: PEMIS_ATMOS ! Emissivity at t+1 for the atmosphere
55 REAL, DIMENSION(:), INTENT(OUT) :: PTRAD ! radiative temp at t+1 for the atmosphere
56 !
57 !* 0.2 declarations of local variables
58 !
59 INTEGER :: JSWB
60 !
61 REAL, DIMENSION(SIZE(F%XTS)) :: ZALBDIR
62 REAL, DIMENSION(SIZE(F%XTS)) :: ZALBSCA
63 !
64 REAL(KIND=JPRB) :: ZHOOK_HANDLE
65 !
66 !-------------------------------------------------------------------------------------
67 !
68 IF (lhook) CALL dr_hook('UPDATE_RAD_FLAKE',0,zhook_handle)
69 !
70 zalbdir(:) = 0.
71 zalbsca(:) = 0.
72 !
73 IF (f%CFLK_ALB=='TA96') THEN
74  zalbdir(:) = albedo_ta96(pzenith(:))
75  zalbsca(:) = xalbsca_wat
76 ELSEIF (f%CFLK_ALB=='MK10') THEN
77  zalbdir(:) = albedo_mk10(pzenith(:))
78  zalbsca(:) = xalbsca_wat
79 ELSE
80  zalbdir(:) = xalbwat
81  zalbsca(:) = xalbwat
82 ENDIF
83 !
84 WHERE (f%XH_SNOW(:)>=h_snow_min_flk)
85 !* snow
86  f%XDIR_ALB (:) = f%XSNOW_ALB(:)
87  f%XSCA_ALB (:) = f%XSNOW_ALB(:)
88  f%XEMIS (:) = xemissn
89 ELSEWHERE(f%XH_ICE(:)>=h_ice_min_flk)
90 !* ice
91  f%XDIR_ALB(:) = f%XICE_ALB(:)
92  f%XSCA_ALB(:) = f%XICE_ALB(:)
93  f%XEMIS (:) = xemiswatice
94 ELSEWHERE
95 !* open water
96  f%XDIR_ALB (:) = zalbdir(:)
97  f%XSCA_ALB (:) = zalbsca(:)
98  f%XEMIS (:) = xemiswat
99 END WHERE
100 !
101 !-------------------------------------------------------------------------------------
102 !
103 DO jswb=1,SIZE(pdir_alb_atmos,2)
104  pdir_alb_atmos(:,jswb) = f%XDIR_ALB(:)
105  psca_alb_atmos(:,jswb) = f%XSCA_ALB(:)
106 END DO
107 !
108 pemis_atmos(:) = f%XEMIS(:)
109 ptrad(:) = f%XTS (:)
110 !
111 IF (lhook) CALL dr_hook('UPDATE_RAD_FLAKE',1,zhook_handle)
112 !
113 !-------------------------------------------------------------------------------------
114 !
115 END SUBROUTINE update_rad_flake
116 
real, save xalbwat
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_flake(F, PZENITH, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD)
logical lhook
Definition: yomhook.F90:15
real function, dimension(size(pzenith)) albedo_mk10(PZENITH)
Definition: albedo_mk10.F90:7
real, save xemiswat