SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/diag_inline_flaken.F90
Go to the documentation of this file.
00001 !     #########
00002        SUBROUTINE DIAG_INLINE_FLAKE_n (PTA, PTS, PQA, PPA, PPS, PRHOA, PZONA, PMERA,   &
00003                                            PHT, PHW,                                     &
00004                                            PCD, PCDN, PCH, PRI, PHU,                     &
00005                                            PZ0, PZ0H,                                    &
00006                                            PQSAT,                                        &
00007                                            PSFTH, PSFTQ, PSFZON, PSFMER,                 &
00008                                            PDIR_SW, PSCA_SW, PLW,                        &
00009                                            PDIR_ALB, PSCA_ALB, PEMIS, PTRAD              )  
00010 !     ###############################################################################
00011 !
00012 !!****  *DIAG_INLINE_FLAKE_n * - computes diagnostics during FLAKE time-step
00013 !!
00014 !!    PURPOSE
00015 !!    -------
00016 !
00017 !!**  METHOD
00018 !!    ------
00019 !!
00020 !!    REFERENCE
00021 !!    ---------
00022 !!      
00023 !!
00024 !!    AUTHOR
00025 !!    ------
00026 !!     V. Masson 
00027 !!
00028 !!    MODIFICATIONS
00029 !!    -------------
00030 !!      Original    01/2004
00031 !!      S. Riette   06/2009 CLS_2M becomes CLS_TQ, CLS_TQ and CLS_WIND have one
00032 !!                          more argument (height of diagnostic)
00033 !!------------------------------------------------------------------
00034 !
00035 
00036 !
00037 !
00038 USE MODD_CSTS,         ONLY : XTT
00039 USE MODD_SURF_PAR,     ONLY : XUNDEF
00040 USE MODD_FLAKE_n,      ONLY : LSBL
00041 USE MODD_DIAG_FLAKE_n, ONLY : N2M, LSURF_BUDGET, LCOEF, LSURF_VARS,   &
00042                                   XT2M, XQ2M, XHU2M, XZON10M, XMER10M,  &
00043                                   XRN, XH, XLE, XLEI, XGFLUX,            &
00044                                   XRI, XCD, XCH, XCE, XZ0, XZ0H,        &
00045                                   XQS, XSWD, XSWU, XLWD,                &
00046                                   XLWU, XSWBD, XSWBU, XFMU, XFMV  
00047 !
00048 USE MODI_PARAM_CLS
00049 USE MODI_CLS_TQ
00050 USE MODI_CLS_WIND
00051 USE MODI_DIAG_SURF_BUDGET_WATER
00052 ! 
00053 !
00054 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00055 USE PARKIND1  ,ONLY : JPRB
00056 !
00057 IMPLICIT NONE
00058 !
00059 !*      0.1    declarations of arguments
00060 !
00061 REAL, DIMENSION(:), INTENT(IN) :: PTA    ! atmospheric temperature
00062 REAL, DIMENSION(:), INTENT(IN) :: PTS    ! surface temperature
00063 REAL, DIMENSION(:), INTENT(IN) :: PQA    ! atmospheric specific humidity
00064 REAL, DIMENSION(:), INTENT(IN) :: PPA    ! atmospheric level pressure
00065 REAL, DIMENSION(:), INTENT(IN) :: PPS    ! surface pressure
00066 REAL, DIMENSION(:), INTENT(IN) :: PRHOA  ! air density
00067 REAL, DIMENSION(:), INTENT(IN) :: PZONA  ! zonal wind
00068 REAL, DIMENSION(:), INTENT(IN) :: PMERA  ! meridian wind
00069 REAL, DIMENSION(:), INTENT(IN) :: PHT    ! atmospheric level height
00070 REAL, DIMENSION(:), INTENT(IN) :: PHW    ! atmospheric level height for wind
00071 REAL, DIMENSION(:), INTENT(IN) :: PCD    ! drag coefficient for momentum
00072 REAL, DIMENSION(:), INTENT(IN) :: PCDN   ! neutral drag coefficient
00073 REAL, DIMENSION(:), INTENT(IN) :: PCH    ! drag coefficient for heat
00074 REAL, DIMENSION(:), INTENT(IN) :: PRI    ! Richardson number
00075 REAL, DIMENSION(:), INTENT(IN) :: PHU    ! near-surface humidity
00076 REAL, DIMENSION(:), INTENT(IN) :: PZ0    ! roughness length for momentum
00077 REAL, DIMENSION(:), INTENT(IN) :: PZ0H   ! roughness length for heat
00078 REAL, DIMENSION(:), INTENT(IN) :: PQSAT  ! humidity at saturation
00079 REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction
00080 REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridian friction
00081 REAL, DIMENSION(:), INTENT(IN) :: PSFTH  ! heat flux  (W/m2)
00082 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ  ! water flux (kg/m2/s)
00083 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW   ! direct  solar radiation (on horizontal surf.)
00084 !                                           !                                       (W/m2)
00085 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW   ! diffuse solar radiation (on horizontal surf.)
00086 !                                           !                                       (W/m2)
00087 REAL, DIMENSION(:), INTENT(IN) :: PLW       ! longwave radiation (on horizontal surf.)
00088 REAL, DIMENSION(:), INTENT(IN) :: PTRAD     ! radiative temperature                 (K)
00089 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_ALB  ! direct albedo for each spectral band  (-)
00090 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_ALB  ! diffuse albedo for each spectral band (-)
00091 REAL, DIMENSION(:), INTENT(IN) :: PEMIS     ! emissivity                            (-)
00092 !
00093 !*      0.2    declarations of local variables
00094 !
00095 REAL, DIMENSION(SIZE(PTA)) :: ZH
00096 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00097 !-------------------------------------------------------------------------------------
00098 !
00099 IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_FLAKE_N',0,ZHOOK_HANDLE)
00100 IF (.NOT. LSBL) THEN
00101   !        
00102   IF (N2M==1) THEN
00103     !
00104     CALL PARAM_CLS(PTA, PTS, PQA, PPA, PRHOA, PZONA, PMERA, PHT, PHW, &
00105                      PSFTH, PSFTQ, PSFZON, PSFMER,                       &
00106                      XT2M, XQ2M, XHU2M, XZON10M, XMER10M                       )  
00107     !
00108     !* Richardson number
00109     !
00110     XRI = PRI
00111     !
00112   ELSE IF (N2M==2) THEN
00113     ZH(:)=2.          
00114     CALL CLS_TQ(PTA, PQA, PPA, PPS, PHT,         &
00115                   PCD, PCH, PRI,                   &
00116                   PTS, PHU, PZ0H, ZH,              &
00117                   XT2M, XQ2M, XHU2M                )  
00118     ZH(:)=10.                
00119     CALL CLS_WIND(PZONA, PMERA, PHW,             &
00120                     PCD, PCDN, PRI, ZH,            &
00121                     XZON10M, XMER10M               )  
00122     XRI = PRI
00123   END IF
00124   !
00125 ELSE
00126   !
00127   IF (N2M>=1) THEN
00128     XT2M    = XUNDEF
00129     XQ2M    = XUNDEF
00130     XHU2M   = XUNDEF
00131     XZON10M = XUNDEF
00132     XMER10M = XUNDEF
00133     XRI     = PRI        
00134   ENDIF
00135   !
00136 ENDIF        
00137 !
00138 IF (LSURF_BUDGET) THEN
00139   !
00140   CALL  DIAG_SURF_BUDGET_WATER (XTT, PRHOA, PSFTH, PSFTQ,             &
00141                                   PDIR_SW, PSCA_SW, PLW,                &
00142                                   PDIR_ALB, PSCA_ALB, PEMIS, PTRAD,     &
00143                                   PSFZON, PSFMER,                       &
00144                                   XRN, XH, XLE, XLEI, XGFLUX,           &
00145                                   XSWD, XSWU, XSWBD, XSWBU, XLWD, XLWU, &
00146                                   XFMU, XFMV )  
00147   !
00148 END IF
00149 !
00150 IF (LCOEF) THEN
00151   !
00152   !* Transfer coefficients
00153   !
00154    XCD = PCD
00155    XCH = PCH
00156    XCE = PCH
00157   !
00158   !* Roughness lengths
00159   !
00160    XZ0  = PZ0
00161    XZ0H = PZ0H
00162   !
00163 END IF
00164 !
00165 IF (LSURF_VARS) THEN
00166   !
00167   !* Humidity at saturation
00168   !
00169    XQS = PQSAT
00170   !
00171 END IF
00172 IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_FLAKE_N',1,ZHOOK_HANDLE)
00173 !-------------------------------------------------------------------------------------
00174 !
00175 END SUBROUTINE DIAG_INLINE_FLAKE_n