SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
seaflux_albedo.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 seaflux_albedo(PDIR_SW,PSCA_SW,PDIR_ALB,PSCA_ALB,PALB)
7 !##########################################################################
8 !
9 !!**** *SEAFLUX_ALBEDO*
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 ! Calculates total sea albedo
15 !
16 !! EXTERNAL
17 !! --------
18 !!
19 !! none
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! AUTHOR
25 !! ------
26 !!
27 !! B. Decharme * Meteo-France *
28 !!
29 !-------------------------------------------------------------------------------
30 !
31 !* 0. DECLARATIONS
32 ! ------------
33 !
34 !
35 USE modd_surf_par, ONLY : xundef
36 !
37 USE yomhook ,ONLY : lhook, dr_hook
38 USE parkind1 ,ONLY : jprb
39 !
40 IMPLICIT NONE
41 !
42 !* 0.1 declarations of arguments
43 !
44 REAL, DIMENSION(:,:), INTENT(IN) :: pdir_sw ! direct incoming solar radiation
45 REAL, DIMENSION(:,:), INTENT(IN) :: psca_sw ! diffuse incoming solar radiation
46 REAL, DIMENSION(:,:), INTENT(IN) :: pdir_alb ! direct albedo
47 REAL, DIMENSION(:,:), INTENT(IN) :: psca_alb ! diffuse albedo
48 !
49 REAL, DIMENSION(:) , INTENT(OUT) :: palb ! albedo
50 !
51 !-------------------------------------------------------------------------------
52 !
53 !* 0. Local variables
54 ! ---------------
55 !
56 REAL, DIMENSION(SIZE(PDIR_SW,1)) :: zsw_up, zglobal_sw
57 !
58 INTEGER :: ini, ji, isw, jswb
59 !
60 REAL(KIND=JPRB) :: zhook_handle
61 !
62 !-------------------------------------------------------------------------------
63 !
64 !* 1. surface albedo for each wavelength
65 ! ----------------------------------
66 !
67 IF (lhook) CALL dr_hook('SEAFLUX_ALBEDO',0,zhook_handle)
68 !
69 ini=SIZE(pdir_sw,1)
70 isw=SIZE(pdir_sw,2)
71 !
72 !* total shortwave incoming and upcoming radiation
73 !
74 zglobal_sw(:) = 0.
75 zsw_up(:) = 0.
76 !
77 DO ji=1,ini
78  DO jswb=1,isw
79  zglobal_sw(ji) = zglobal_sw(ji) + pdir_sw(ji,jswb) + psca_sw(ji,jswb)
80  zsw_up(ji) = zsw_up(ji) + pdir_alb(ji,jswb) * pdir_sw(ji,jswb) &
81  + psca_alb(ji,jswb) * psca_sw(ji,jswb)
82  END DO
83 END DO
84 !
85 !* global albedo
86 !
87 WHERE(zglobal_sw(:)>0.)
88  palb(:) = zsw_up(:) / zglobal_sw(:)
89 ELSEWHERE
90  palb(:) = pdir_alb(:,1)
91 END WHERE
92 !
93 IF (lhook) CALL dr_hook('SEAFLUX_ALBEDO',1,zhook_handle)
94 !
95 !-------------------------------------------------------------------------------
96 !
97 END SUBROUTINE seaflux_albedo
subroutine seaflux_albedo(PDIR_SW, PSCA_SW, PDIR_ALB, PSCA_ALB, PALB)