SURFEX v7.3
General documentation of Surfex
|
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