6 SUBROUTINE update_rad_sea(HALB,PSST,PZENITH,PTT,PEMIS,PDIR_ALB,PSCA_ALB, &
7 pdir_alb_atmos,psca_alb_atmos,pemis_atmos,ptrad,&
8 ohandle_sic,ptice,psic,pice_alb,pu,pv )
39 xalbwat, xalbsca_wat, &
48 USE yomhook
,ONLY : lhook, dr_hook
49 USE parkind1
,ONLY : jprb
55 CHARACTER(LEN=4),
INTENT(IN) :: halb
57 REAL,
DIMENSION(:),
INTENT(IN) :: psst
58 REAL,
DIMENSION(:),
INTENT(IN) :: pzenith
59 REAL,
INTENT(IN) :: ptt
61 REAL,
DIMENSION(:),
INTENT(INOUT):: pdir_alb
62 REAL,
DIMENSION(:),
INTENT(INOUT):: psca_alb
63 REAL,
DIMENSION(:),
INTENT(OUT) :: pemis
65 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pdir_alb_atmos
66 REAL,
DIMENSION(:,:),
INTENT(OUT) :: psca_alb_atmos
67 REAL,
DIMENSION(:),
INTENT(OUT) :: pemis_atmos
68 REAL,
DIMENSION(:),
INTENT(OUT) :: ptrad
70 LOGICAL,
INTENT(IN) ,
OPTIONAL :: ohandle_sic
71 REAL,
DIMENSION(:),
INTENT(IN) ,
OPTIONAL :: ptice
72 REAL,
DIMENSION(:),
INTENT(IN) ,
OPTIONAL :: psic
73 REAL,
DIMENSION(:),
INTENT(IN) ,
OPTIONAL :: pice_alb
74 REAL,
DIMENSION(:),
INTENT(IN) ,
OPTIONAL :: pu
75 REAL,
DIMENSION(:),
INTENT(IN) ,
OPTIONAL :: pv
80 REAL,
DIMENSION(SIZE(PZENITH)) :: zalbdir
81 REAL,
DIMENSION(SIZE(PZENITH)) :: zalbsca
82 REAL,
DIMENSION(SIZE(PZENITH)) :: zwind
83 LOGICAL :: ghandle_sic
85 REAL(KIND=JPRB) :: zhook_handle
89 IF (lhook) CALL dr_hook(
'UPDATE_RAD_SEA',0,zhook_handle)
94 IF (halb==
'TA96')
THEN
97 zalbsca(:) = xalbsca_wat
99 ELSEIF (halb==
'MK10')
THEN
102 zalbsca(:) = xalbsca_wat
104 ELSEIF (halb==
'RS14')
THEN
106 IF (present(pu).AND.present(pv))
THEN
107 zwind(:) = sqrt(pu(:)**2+pv(:)**2)
108 CALL
albedo_rs14(pzenith(:),zwind(:),zalbdir(:),zalbsca(:))
110 zalbdir(:) = pdir_alb(:)
111 zalbsca(:) = psca_alb(:)
116 IF (.NOT. present(ohandle_sic))
THEN
119 ghandle_sic=ohandle_sic
127 WHERE (psst(:)>=ptt )
132 pemis(:) = xemiswatice
135 IF (halb==
'TA96' .OR. halb==
'MK10' .OR. halb==
'RS14')
THEN
138 WHERE (psst(:)>=ptt) pdir_alb(:) = zalbdir(:)
139 WHERE (psst(:)>=ptt) psca_alb(:) = zalbsca(:)
142 ELSEIF(ghandle_sic)
THEN
145 pemis(:) = ( 1 - psic(:)) * xemiswat + psic(:) * xemiswatice
146 IF (halb==
'UNIF')
THEN
147 pdir_alb(:) = ( 1 - psic(:)) * xalbwat + psic(:) * pice_alb(:)
148 psca_alb(:) = ( 1 - psic(:)) * xalbwat + psic(:) * pice_alb(:)
149 ELSE IF (halb==
'TA96' .OR. halb==
'MK10' .OR. halb==
'RS14')
THEN
150 pdir_alb(:) = ( 1 - psic(:)) * zalbdir(:) + psic(:) * pice_alb(:)
151 psca_alb(:) = ( 1 - psic(:)) * zalbsca(:) + psic(:) * pice_alb(:)
155 IF (halb==
'UNIF')
THEN
157 WHERE (psst(:)>=ptt )
159 pdir_alb(:) = xalbwat
160 psca_alb(:) = xalbwat
164 pdir_alb(:) = xalbseaice
165 psca_alb(:) = xalbseaice
166 pemis(:) = xemiswatice
169 ELSE IF (halb==
'TA96' .OR. halb==
'MK10' .OR. halb==
'RS14')
THEN
174 pdir_alb(:) = zalbdir(:)
175 psca_alb(:) = zalbsca(:)
179 pdir_alb(:) = xalbseaice
180 psca_alb(:) = xalbseaice
181 pemis(:) = xemiswatice
190 DO jswb=1,
SIZE(pdir_alb_atmos,2)
191 pdir_alb_atmos(:,jswb) = pdir_alb(:)
192 psca_alb_atmos(:,jswb) = psca_alb(:)
195 pemis_atmos(:) = pemis(:)
197 ptrad(:) = (((1 - psic(:)) * xemiswat * psst(:)**4 + &
198 psic(:) * xemiswatice * ptice(:)**4)/ &
204 IF (lhook) CALL dr_hook(
'UPDATE_RAD_SEA',1,zhook_handle)
subroutine update_rad_sea(HALB, PSST, PZENITH, PTT, PEMIS, PDIR_ALB, PSCA_ALB, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD, OHANDLE_SIC, PTICE, PSIC, PICE_ALB, PU, PV)
subroutine albedo_rs14(PZENITH, PWIND, PDIR_ALB, PSCA_ALB)
real function, dimension(size(pzenith)) albedo_ta96(PZENITH)
real function, dimension(size(pzenith)) albedo_mk10(PZENITH)