SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/average_rad.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE AVERAGE_RAD(PFRAC_TILE,                              &
00003                    PDIR_ALB_TILE, PSCA_ALB_TILE, PEMIS_TILE, PTRAD_TILE,  &
00004                    PDIR_ALB, PSCA_ALB, PEMIS, PTRAD                       )  
00005 !     #################################################################
00006 !
00007 !
00008 !!****  *AVERAGE_RAD*  
00009 !!
00010 !!    PURPOSE
00011 !!    -------
00012 !      Average the radiative fluxes from the land and water surfaces depending on the
00013 !      fraction of each surface cover type in the mesh area.
00014 !     
00015 !!**  METHOD
00016 !!    ------
00017 !
00018 !!    EXTERNAL
00019 !!    --------
00020 !!
00021 !!    IMPLICIT ARGUMENTS
00022 !!    ------------------ 
00023 !!
00024 !!      
00025 !!    REFERENCE
00026 !!    ---------
00027 !!      
00028 !!    AUTHOR
00029 !!    ------
00030 !!      S. Belair           * Meteo-France *
00031 !!
00032 !!    MODIFICATIONS
00033 !!    -------------
00034 !!      Original    10/03/95 
00035 !!      V.Masson    20/03/96  remove abnormal averages and average TS**4 instead
00036 !!                            of TS
00037 !!      (J.Stein)   27/03/96 use only H and LE in the soil scheme
00038 !!      A. Boone    27/11/02 revised to output ALMA variables, and general applications
00039 !-------------------------------------------------------------------------------
00040 !
00041 !*       0.     DECLARATIONS
00042 !               ------------
00043 !
00044 !
00045 !
00046 !
00047 !
00048 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00049 USE PARKIND1  ,ONLY : JPRB
00050 !
00051 IMPLICIT NONE
00052 !
00053 !*      0.1    declarations of arguments
00054 !
00055 !
00056 !*      0.1    declarations of arguments
00057 !
00058 REAL, DIMENSION(:,:),   INTENT(IN) :: PFRAC_TILE    ! Fraction in a mesh-area of 
00059 !                                                   ! a given surface
00060 REAL, DIMENSION(:,:),   INTENT(IN) :: PEMIS_TILE    ! emissivity
00061 REAL, DIMENSION(:,:,:), INTENT(IN) :: PDIR_ALB_TILE ! direct albedo
00062 REAL, DIMENSION(:,:,:), INTENT(IN) :: PSCA_ALB_TILE ! diffuse albedo
00063 REAL, DIMENSION(:,:),   INTENT(IN) :: PTRAD_TILE    ! surface radiative temp.
00064 REAL, DIMENSION(:),     INTENT(OUT):: PEMIS         ! emissivity
00065 REAL, DIMENSION(:,:),   INTENT(OUT):: PDIR_ALB      ! direct albedo
00066 REAL, DIMENSION(:,:),   INTENT(OUT):: PSCA_ALB      ! diffuse albedo
00067 REAL, DIMENSION(:),     INTENT(OUT):: PTRAD         ! surface radiative temp.
00068 !
00069 !
00070 !*      0.2    declarations of local variables
00071 !
00072 INTEGER :: JSWB ! loop counter on number of SW spectral bands
00073 INTEGER :: JTILE! loop counter on tiles
00074 REAL, PARAMETER    :: ZEPS = 1.E-10
00075 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00076 !-------------------------------------------------------------------------------
00077 !
00078 !       1.     Grid-Box average surface temperatures, radiative properties
00079 !              -----------------------------------------------------------
00080 !
00081 ! albedo:
00082 ! 
00083 IF (LHOOK) CALL DR_HOOK('AVERAGE_RAD',0,ZHOOK_HANDLE)
00084 PDIR_ALB   (:,:) = 0.
00085 PSCA_ALB   (:,:) = 0.
00086 !
00087 DO JSWB = 1,SIZE(PDIR_ALB_TILE,2)
00088   DO JTILE = 1,SIZE(PDIR_ALB_TILE,3)
00089     PDIR_ALB(:,JSWB) = PDIR_ALB(:,JSWB) + PFRAC_TILE(:,JTILE) * PDIR_ALB_TILE(:,JSWB,JTILE)
00090     PSCA_ALB(:,JSWB) = PSCA_ALB(:,JSWB) + PFRAC_TILE(:,JTILE) * PSCA_ALB_TILE(:,JSWB,JTILE)
00091   END DO
00092 END DO
00093 !
00094 ! emissivity
00095 !
00096 PEMIS      (:)   = 0.
00097 !
00098 DO JTILE = 1,SIZE(PEMIS_TILE,2)
00099   PEMIS(:) = PEMIS(:) + PFRAC_TILE(:,JTILE) * PEMIS_TILE(:,JTILE)
00100 END DO
00101 !
00102 ! radiative surface temperature
00103 !
00104 PTRAD      (:)   = 0.
00105 !
00106 DO JTILE = 1, SIZE(PEMIS_TILE,2)
00107 !
00108    PTRAD(:) = PTRAD(:) + (PTRAD_TILE(:,JTILE)**4)*PFRAC_TILE(:,JTILE)*PEMIS_TILE(:,JTILE)
00109 !
00110 END DO
00111 
00112 PTRAD(:) = ( PTRAD(:) / MAX(PEMIS(:),ZEPS) )**0.25
00113 IF (LHOOK) CALL DR_HOOK('AVERAGE_RAD',1,ZHOOK_HANDLE)
00114 !
00115 !-------------------------------------------------------------------------------
00116 !
00117 END SUBROUTINE AVERAGE_RAD