SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/diag_inline_isban.F90
Go to the documentation of this file.
00001 !     #########
00002  SUBROUTINE DIAG_INLINE_ISBA_n (PTA, PTS, PQA, PPA, PPS, PRHOA, PZONA, PMERA,  &
00003                                   PHT, PHW, PCD, PCDN, PCH, PRI, PHU, PZ0, PZ0H, &
00004                                   PZ0EFF, PSFTH, PSFTQ, PSFZON, PSFMER, PQS,     &
00005                                   PDIR_ALB, PSCA_ALB, PDIR_SW, PSCA_SW, PLW, PRN )  
00006 !     ###############################################################################
00007 !
00008 !!****  *DIAG_INLINE_ISBA_n * - computes diagnostics during ISBA time-step
00009 !!
00010 !!    PURPOSE
00011 !!    -------
00012 !
00013 !!**  METHOD
00014 !!    ------
00015 !!
00016 !!    REFERENCE
00017 !!    ---------
00018 !!      
00019 !!
00020 !!    AUTHOR
00021 !!    ------
00022 !!     V. Masson 
00023 !!
00024 !!    MODIFICATIONS
00025 !!    -------------
00026 !!      Original    01/2004
00027 !!      B. Decharme 08/2009 caculate cumulated diag LSURF_BUDGETC
00028 !!      S. Riette   06/2009 CLS_2M becomes CLS_TQ, CLS_TQ and CLS_WIND have one
00029 !!                          more argument (height of diagnostic)
00030 !!------------------------------------------------------------------
00031 !
00032 
00033 !
00034 !
00035 USE MODD_SURF_PAR,         ONLY : XUNDEF
00036 USE MODD_ISBA_n,           ONLY : LCANOPY
00037 USE MODD_DIAG_ISBA_n,      ONLY : N2M, LCOEF, LSURF_VARS, LSURF_BUDGET
00038 USE MODD_DIAG_EVAP_ISBA_n, ONLY : LSURF_BUDGETC
00039 USE MODD_PACK_DIAG_ISBA,   ONLY : XP_T2M, XP_Q2M, XP_HU2M, XP_ZON10M, XP_MER10M, &
00040                                     XP_CD, XP_CH, XP_CE, XP_RI, XP_Z0_WITH_SNOW,   &
00041                                     XP_Z0H_WITH_SNOW, XP_Z0EFF, XP_QS,             &
00042                                     XP_SWD, XP_SWU, XP_SWBD, XP_SWBU,              &
00043                                     XP_LWD, XP_LWU, XP_FMU, XP_FMV  
00044 !
00045 USE MODI_PARAM_CLS
00046 USE MODI_CLS_TQ
00047 USE MODI_CLS_WIND
00048 USE MODI_DIAG_SURF_BUDGET_ISBA
00049 ! 
00050 !
00051 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00052 USE PARKIND1  ,ONLY : JPRB
00053 !
00054 IMPLICIT NONE
00055 !
00056 !*      0.1    declarations of arguments
00057 !
00058 REAL, DIMENSION(:), INTENT(IN)       :: PTA      ! atmospheric temperature
00059 REAL, DIMENSION(:), INTENT(IN)       :: PTS      ! surface temperature
00060 REAL, DIMENSION(:), INTENT(IN)       :: PQA      ! atmospheric specific humidity
00061 REAL, DIMENSION(:), INTENT(IN)       :: PPA      ! atmospheric level pressure
00062 REAL, DIMENSION(:), INTENT(IN)       :: PPS      ! surface pressure
00063 REAL, DIMENSION(:), INTENT(IN)       :: PRHOA    ! air density
00064 REAL, DIMENSION(:), INTENT(IN)       :: PZONA    ! zonal wind
00065 REAL, DIMENSION(:), INTENT(IN)       :: PMERA    ! meridian wind
00066 REAL, DIMENSION(:), INTENT(IN)       :: PHT      ! atmospheric level height
00067 REAL, DIMENSION(:), INTENT(IN)       :: PHW      ! atmospheric level height for wind
00068 REAL, DIMENSION(:), INTENT(IN)       :: PCD      ! drag coefficient for momentum
00069 REAL, DIMENSION(:), INTENT(IN)       :: PCDN     ! neutral drag coefficient
00070 REAL, DIMENSION(:), INTENT(IN)       :: PCH      ! drag coefficient for heat
00071 REAL, DIMENSION(:), INTENT(IN)       :: PRI      ! Richardson number
00072 REAL, DIMENSION(:), INTENT(IN)       :: PHU      ! near-surface humidity
00073 REAL, DIMENSION(:), INTENT(IN)       :: PZ0      ! roughness length for momentum
00074 REAL, DIMENSION(:), INTENT(IN)       :: PZ0H     ! roughness length for heat
00075 REAL, DIMENSION(:), INTENT(IN)       :: PZ0EFF   ! effective roughness length (z0+z0rel)
00076 REAL, DIMENSION(:), INTENT(IN)       :: PQS      ! humidity at surface 
00077 REAL, DIMENSION(:,:), INTENT(IN)     :: PDIR_ALB ! direct albedo for each spectral band
00078 REAL, DIMENSION(:,:), INTENT(IN)     :: PSCA_ALB ! diffuse albedo for each spectral band (-)
00079 REAL, DIMENSION(:,:), INTENT(IN)     :: PDIR_SW  ! direct  solar radiation (on horizontal surf.)
00080 REAL, DIMENSION(:,:), INTENT(IN)     :: PSCA_SW  ! diffuse solar radiation (on horizontal surf.)
00081 REAL, DIMENSION(:), INTENT(IN)       :: PLW      ! longwave radiation (on horizontal surf.)
00082 REAL, DIMENSION(:), INTENT(IN)       :: PRN      ! Surface net radiation
00083 !
00084 REAL, DIMENSION(:), INTENT(IN)       :: PSFZON   ! zonal friction
00085 REAL, DIMENSION(:), INTENT(IN)       :: PSFMER   ! meridian friction
00086 REAL, DIMENSION(:), INTENT(IN)       :: PSFTH    ! heat flux (W/m2)
00087 REAL, DIMENSION(:), INTENT(IN)       :: PSFTQ    ! water flux (kg/m2/s)
00088 !
00089 !*      0.2    declarations of local variables
00090 !
00091 REAL, DIMENSION(SIZE(PTA)) :: ZH
00092 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00093 !-------------------------------------------------------------------------------------
00094 !
00095 IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_ISBA_N',0,ZHOOK_HANDLE)
00096 IF (.NOT. LCANOPY) THEN
00097 !        
00098   IF (N2M==1) THEN
00099     CALL PARAM_CLS(PTA, PTS, PQA, PPA, PRHOA, PZONA, PMERA, PHT, PHW,  &
00100                      PSFTH, PSFTQ, PSFZON, PSFMER,                     &
00101                      XP_T2M, XP_Q2M, XP_HU2M, XP_ZON10M, XP_MER10M     )  
00102     XP_RI     = PRI        
00103   ELSE IF (N2M==2) THEN
00104     ZH(:)=2.          
00105     CALL CLS_TQ(PTA, PQA, PPA, PPS, PHT,           &
00106                   PCD, PCH, PRI,                   &
00107                   PTS, PHU, PZ0H, ZH,              &
00108                   XP_T2M, XP_Q2M, XP_HU2M          )  
00109     ZH(:)=10.                
00110     CALL CLS_WIND(PZONA, PMERA, PHW,               &
00111                     PCD, PCDN, PRI, ZH,            &
00112                     XP_ZON10M, XP_MER10M           )  
00113     XP_RI     = PRI        
00114   END IF
00115 !
00116 ELSE
00117   !        
00118   IF (N2M>=1) THEN
00119     XP_T2M    = XUNDEF
00120     XP_Q2M    = XUNDEF
00121     XP_HU2M   = XUNDEF
00122     XP_ZON10M = XUNDEF
00123     XP_MER10M = XUNDEF
00124     XP_RI     = PRI        
00125   ENDIF
00126   !        
00127 ENDIF
00128 !
00129 IF (LSURF_BUDGET.OR.LSURF_BUDGETC) THEN
00130    !
00131    CALL DIAG_SURF_BUDGET_ISBA(PDIR_SW, PSCA_SW, PDIR_ALB, PSCA_ALB,  &
00132                                 PLW, PRN,                              &
00133                                 XP_SWD, XP_SWU, XP_SWBD, XP_SWBU,      &
00134                                 XP_LWD, XP_LWU   )          
00135    !
00136    XP_FMU = PSFZON
00137    XP_FMV = PSFMER
00138    !
00139 END IF
00140 !
00141 IF (LCOEF) THEN
00142   !
00143   !* Transfer coefficient
00144   !
00145   XP_CD = PCD
00146   XP_CH = PCH
00147   XP_CE = PCH
00148   !
00149   !* Roughness lengths
00150   !
00151   XP_Z0_WITH_SNOW  = PZ0
00152   XP_Z0H_WITH_SNOW = PZ0H
00153   XP_Z0EFF         = PZ0EFF
00154   !
00155 ENDIF
00156 !
00157 IF (LSURF_VARS) THEN
00158   !
00159   !* Humidity at surface
00160   !
00161   XP_QS = PQS
00162   !
00163 ENDIF
00164 IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_ISBA_N',1,ZHOOK_HANDLE)
00165 !
00166 !-------------------------------------------------------------------------------------
00167 !
00168 END SUBROUTINE DIAG_INLINE_ISBA_n