SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/diag_surf_budget_sea.F90
Go to the documentation of this file.
00001 !     #########
00002        SUBROUTINE DIAG_SURF_BUDGET_SEA (PTT  , PTS, PRHOA, PSFTH, PSFTQ,      &
00003                                           PDIR_SW, PSCA_SW, PLW,                &
00004                                           PDIR_ALB, PSCA_ALB, PEMIS, PTRAD,     &
00005                                           PSFZON, PSFMER,                       &
00006                                           PRN, PH, PLE, PLEI, PGFLUX,           &
00007                                           PSWD, PSWU, PSWBD, PSWBU, PLWD, PLWU, &
00008                                           PFMU, PFMV                            )  
00009 !     ###############################################################################
00010 !
00011 !!****  *DIAG_SURF_BUDGET_WATER * - Computes diagnostics over water
00012 !!
00013 !!    PURPOSE
00014 !!    -------
00015 !
00016 !!**  METHOD
00017 !!    ------
00018 !!
00019 !!    REFERENCE
00020 !!    ---------
00021 !!      
00022 !!
00023 !!    AUTHOR
00024 !!    ------
00025 !!     V. Masson 
00026 !!
00027 !!    MODIFICATIONS
00028 !!    -------------
00029 !!      Original    01/2004
00030 !!------------------------------------------------------------------
00031 !
00032 
00033 !
00034 !
00035 USE MODD_CSTS,           ONLY : XSTEFAN, XLSTT, XLVTT, XCPD, XCPV, XCL
00036 !
00037 ! 
00038 !
00039 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00040 USE PARKIND1  ,ONLY : JPRB
00041 !
00042 IMPLICIT NONE
00043 !
00044 !*      0.1    declarations of arguments
00045 !
00046 REAL,               INTENT(IN) :: PTT       ! freezing temperature of water surface
00047 REAL, DIMENSION(:), INTENT(IN) :: PTS       ! surface temperature (K)
00048 REAL, DIMENSION(:), INTENT(IN) :: PRHOA     ! air density
00049 REAL, DIMENSION(:), INTENT(IN) :: PSFTH     ! heat flux
00050 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ     ! water flux
00051 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW   ! direct  solar radiation (on horizontal surf.)
00052 !                                           !                                       (W/m2)
00053 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW   ! diffuse solar radiation (on horizontal surf.)
00054 !                                           !                                       (W/m2)
00055 REAL, DIMENSION(:), INTENT(IN) :: PLW       ! longwave radiation (on horizontal surf.)
00056 REAL, DIMENSION(:), INTENT(IN) :: PTRAD     ! radiative temperature                 (K)
00057 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_ALB  ! direct albedo for each spectral band  (-)
00058 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_ALB  ! diffuse albedo for each spectral band (-)
00059 REAL, DIMENSION(:), INTENT(IN) :: PEMIS     ! emissivity                            (-)
00060 REAL, DIMENSION(:), INTENT(IN) :: PSFZON    ! zonal friction
00061 REAL, DIMENSION(:), INTENT(IN) :: PSFMER    ! meridional friction
00062 !
00063 REAL, DIMENSION(:), INTENT(OUT):: PRN       ! net radiation                         (W/m2)
00064 REAL, DIMENSION(:), INTENT(OUT):: PH        ! sensible heat flux                    (W/m2)
00065 REAL, DIMENSION(:), INTENT(OUT):: PLE       ! total latent heat flux                (W/m2)
00066 REAL, DIMENSION(:), INTENT(OUT):: PLEI      ! sublimation latent heat flux          (W/m2)
00067 REAL, DIMENSION(:), INTENT(OUT):: PGFLUX    ! storage flux                          (W/m2)
00068 !
00069 REAL, DIMENSION(:,:), INTENT(OUT):: PSWBD  ! incoming short wave radiation by spectral band (W/m2)
00070 REAL, DIMENSION(:,:), INTENT(OUT):: PSWBU  ! upward  short wave radiation by spectral band (W/m2)
00071 REAL, DIMENSION(:), INTENT(OUT):: PSWD     ! total incoming short wave radiation (W/m2)
00072 REAL, DIMENSION(:), INTENT(OUT):: PSWU     ! total upward short wave radiation (W/m2)
00073 REAL, DIMENSION(:), INTENT(OUT):: PLWD     ! Downward long wave radiation (W/m2)
00074 REAL, DIMENSION(:), INTENT(OUT):: PLWU     ! upward long wave radiation (W/m2)
00075 REAL, DIMENSION(:), INTENT(OUT):: PFMU     ! zonal wind stress
00076 REAL, DIMENSION(:), INTENT(OUT):: PFMV     ! meridian wind stress
00077 !
00078 !*      0.2    declarations of local variables
00079 !
00080 INTEGER                      :: ISWB ! number of SW bands
00081 INTEGER                      :: JSWB ! loop counter on number of SW bands
00082 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00083 !-------------------------------------------------------------------------------------
00084 !
00085 !
00086 IF (LHOOK) CALL DR_HOOK('DIAG_SURF_BUDGET_SEA',0,ZHOOK_HANDLE)
00087 ISWB = SIZE(PDIR_SW,2)
00088 ! 
00089 !* total incoming and outgoing SW
00090 !
00091 DO JSWB=1,ISWB
00092   PSWBD(:,JSWB) = PDIR_SW(:,JSWB)                    + PSCA_SW(:,JSWB)
00093   PSWBU(:,JSWB) = PDIR_SW(:,JSWB) * PDIR_ALB(:,JSWB) + PSCA_SW(:,JSWB) * PSCA_ALB(:,JSWB) 
00094 ENDDO
00095 !
00096 PSWD(:) = 0.
00097 PSWU(:) = 0.
00098 DO JSWB=1,ISWB
00099    PSWD(:)=PSWD(:)+PSWBD(:,JSWB)
00100    PSWU(:)=PSWU(:)+PSWBU(:,JSWB)
00101 ENDDO
00102 !
00103 !*incoming outgoing LW
00104 !
00105 PLWD(:)=PLW(:)
00106 PLWU(:)=PEMIS(:)*XSTEFAN*PTRAD(:)**4 + (1.-PEMIS(:))*PLW(:)
00107 !
00108 !* net radiation
00109 !
00110 PRN    =   PSWD(:) - PSWU(:) + PLWD(:) - PLWU(:)
00111 !
00112 !* sensible heat flux
00113 !
00114 PH     = PSFTH(:)
00115 !
00116 !* latent heat flux
00117 !
00118 WHERE (PTRAD<PTT  )
00119   PLE    = PSFTQ * XLSTT
00120   PLEI   = PSFTQ * XLSTT
00121 ELSEWHERE
00122   PLE    = PSFTQ * XLVTT
00123   PLEI   = 0.0
00124 END WHERE
00125 !
00126 !* storage flux
00127 !
00128 PGFLUX = PRN - PH - PLE
00129 !
00130 !* wind stress
00131 !
00132 PFMU = PSFZON
00133 !
00134 PFMV = PSFMER
00135 IF (LHOOK) CALL DR_HOOK('DIAG_SURF_BUDGET_SEA',1,ZHOOK_HANDLE)
00136 !
00137 !-------------------------------------------------------------------------------------
00138 !
00139 END SUBROUTINE DIAG_SURF_BUDGET_SEA