SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/update_rad_seawat.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE UPDATE_RAD_SEAWAT(HALB,PSST,PZENITH,PTT,PEMIS,PDIR_ALB,PSCA_ALB,     &
00003                                PDIR_ALB_ATMOS,PSCA_ALB_ATMOS,PEMIS_ATMOS,PTRAD)  
00004 !     #######################################################################
00005 !
00006 !!****  *UPDATE_RAD_SEAWAT * - update the radiative properties at time t+1 (see by the atmosphere) 
00007 !                           in order to close the energy budget between surfex and the atmosphere
00008  
00009 !!
00010 !!    PURPOSE
00011 !!    -------
00012 !
00013 !!**  METHOD
00014 !!    ------
00015 !!
00016 !!    REFERENCE
00017 !!    ---------
00018 !!      
00019 !!
00020 !!    AUTHOR
00021 !!    ------
00022 !!     B. Decharme 
00023 !!
00024 !!    MODIFICATIONS
00025 !!    -------------
00026 !!      Original    09/2009
00027 !!      Modified    03/2011 : E. Bazile (MK10) albedo from Marat Khairoutdinov
00028 !!------------------------------------------------------------------
00029 !
00030 USE MODD_WATER_PAR
00031 USE MODD_CSTS,       ONLY : XTT
00032 USE MODD_SURF_ATM,   ONLY : LCPL_ESM
00033 !
00034 USE MODI_ALBEDO_TA96
00035 USE MODI_ALBEDO_MK10
00036 !
00037 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00038 USE PARKIND1  ,ONLY : JPRB
00039 !
00040 IMPLICIT NONE
00041 !
00042 !*      0.1    declarations of arguments
00043 !
00044  CHARACTER(LEN=4),       INTENT(IN)   :: HALB
00045 !
00046 REAL, DIMENSION(:),     INTENT(IN)   :: PSST      ! Sea surface temperature
00047 REAL, DIMENSION(:),     INTENT(IN)   :: PZENITH   ! Zenithal angle at t+1
00048 REAL,                   INTENT(IN)   :: PTT       ! Sea/ice transition temperature (different according to sea or inland water)
00049 !
00050 REAL, DIMENSION(:),     INTENT(INOUT):: PDIR_ALB  ! Direct albedo at t+1
00051 REAL, DIMENSION(:),     INTENT(INOUT):: PSCA_ALB  ! Diffuse albedo at t+1
00052 REAL, DIMENSION(:),     INTENT(OUT)  :: PEMIS     ! emissivity (soil+vegetation) at t+1
00053 !
00054 REAL, DIMENSION(:,:),   INTENT(OUT)  :: PDIR_ALB_ATMOS ! Direct albedo at t+1 for the atmosphere
00055 REAL, DIMENSION(:,:),   INTENT(OUT)  :: PSCA_ALB_ATMOS ! Diffuse albedo at t+1 for the atmosphere
00056 REAL, DIMENSION(:),     INTENT(OUT)  :: PEMIS_ATMOS    ! Emissivity at t+1 for the atmosphere
00057 REAL, DIMENSION(:),     INTENT(OUT)  :: PTRAD          ! radiative temp at t+1 for the atmosphere
00058 !
00059 !*      0.2    declarations of local variables
00060 !
00061 INTEGER :: JSWB
00062 REAL, DIMENSION(SIZE(PSST)) :: ZALBEDO
00063 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00064 !
00065 !-------------------------------------------------------------------------------------
00066 !
00067 IF (LHOOK) CALL DR_HOOK('UPDATE_RAD_SEAWAT',0,ZHOOK_HANDLE)
00068 !
00069 ZALBEDO(:) = 0.
00070 IF (HALB=='TA96') THEN
00071   ZALBEDO(:) = ALBEDO_TA96(PZENITH(:))
00072 ELSEIF (HALB=='MK10') THEN
00073   ZALBEDO(:) = ALBEDO_MK10(PZENITH(:))
00074 ENDIF
00075 !
00076 IF(LCPL_ESM)THEN !Earth System Model
00077 !
00078 !Sea and/or ice albedo already given by oceanic model
00079 !Except for Taylor et al (1996) formulation
00080 !
00081   !
00082   WHERE (PSST(:)>=PTT  )
00083     !* open water
00084     PEMIS   (:) = XEMISWAT
00085   ELSEWHERE
00086     !* sea ice
00087     PEMIS   (:) = XEMISWATICE
00088   END WHERE
00089   !
00090   IF (HALB=='TA96' .OR. HALB=='MK10') THEN
00091     !* Taylor et al 1996
00092     !* open water
00093     WHERE (PSST(:)>=PTT) PDIR_ALB(:) = ZALBEDO(:)
00094     WHERE (PSST(:)>=PTT) PSCA_ALB(:) = XALBSCA_WAT
00095   ENDIF
00096   !
00097 ELSE
00098   !
00099   IF (HALB=='UNIF') THEN
00100   !* uniform albedo
00101     WHERE (PSST(:)>=PTT  )
00102     !* open water
00103       PDIR_ALB  (:) = XALBWAT
00104       PSCA_ALB  (:) = XALBWAT
00105       PEMIS     (:) = XEMISWAT
00106     ELSEWHERE
00107     !* sea ice
00108       PDIR_ALB(:) = XALBWATICE
00109       PSCA_ALB(:) = XALBWATICE
00110       PEMIS   (:) = XEMISWATICE
00111     END WHERE
00112   !
00113   ELSE IF (HALB=='TA96' .OR. HALB=='MK10') THEN
00114     !* Taylor et al 1996
00115     WHERE (PSST(:)>=PTT) PDIR_ALB(:) = ZALBEDO(:)
00116     !
00117     WHERE (PSST(:)>=PTT)
00118     !* open water
00119       PSCA_ALB  (:) = XALBSCA_WAT
00120       PEMIS     (:) = XEMISWAT
00121     ELSEWHERE
00122     !* sea ice
00123       PDIR_ALB(:) = XALBWATICE
00124       PSCA_ALB(:) = XALBWATICE
00125       PEMIS   (:) = XEMISWATICE
00126     END WHERE
00127     !
00128   ENDIF
00129   !
00130 ENDIF
00131 !
00132 !-------------------------------------------------------------------------------------
00133 !
00134 DO JSWB=1,SIZE(PDIR_ALB_ATMOS,2)
00135   PDIR_ALB_ATMOS(:,JSWB) = PDIR_ALB(:)
00136   PSCA_ALB_ATMOS(:,JSWB) = PSCA_ALB(:)
00137 END DO
00138 !
00139 PEMIS_ATMOS(:) = PEMIS(:)
00140 PTRAD      (:) = PSST (:)
00141 !
00142 IF (LHOOK) CALL DR_HOOK('UPDATE_RAD_SEAWAT',1,ZHOOK_HANDLE)
00143 !
00144 !-------------------------------------------------------------------------------------
00145 !
00146 END SUBROUTINE UPDATE_RAD_SEAWAT
00147