SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/diag_inline_seafluxn.F90
Go to the documentation of this file.
00001 !     #########
00002        SUBROUTINE DIAG_INLINE_SEAFLUX_n (PTSTEP, PTA, PTS, PQA, PPA, PPS, PRHOA, PZONA,      &
00003                                            PMERA, PHT, PHW, PCD, PCDN, PCH, PCE, PRI, PHU,     &
00004                                            PZ0, PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER,     &
00005                                            PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PEMIS,   &
00006                                            PTRAD, PRAIN, PSNOW, PTICE, PSFTH_ICE, PSFTQ_ICE    )  
00007 !     #####################################################################################
00008 !
00009 !!****  *DIAG_INLINE_SEAFLUX_n * - computes diagnostics during SEAFLUX time-step
00010 !!
00011 !!    PURPOSE
00012 !!    -------
00013 !
00014 !!**  METHOD
00015 !!    ------
00016 !!
00017 !!    REFERENCE
00018 !!    ---------
00019 !!      
00020 !!
00021 !!    AUTHOR
00022 !!    ------
00023 !!     V. Masson 
00024 !!
00025 !!    MODIFICATIONS
00026 !!    -------------
00027 !!      Original    01/2004
00028 !!      Modified    01/2006 : sea flux parameterization.
00029 !!      B. Decharme 08/2009 : Diag for Earth System Model Coupling
00030 !!      S. Riette   06/2009 CLS_2M becomes CLS_TQ, CLS_TQ and CLS_WIND have one
00031 !!                          more argument (height of diagnostic)
00032 !!------------------------------------------------------------------
00033 !
00034 
00035 !
00036 !
00037 USE MODD_CSTS,           ONLY : XTTS
00038 USE MODD_SURF_PAR,       ONLY : XUNDEF
00039 USE MODD_SURF_ATM,       ONLY : LCPL_ESM
00040 USE MODD_SEAFLUX_n,      ONLY : LSBL
00041 USE MODD_DIAG_SEAFLUX_n, ONLY : N2M, LSURF_BUDGET, LCOEF, LSURF_VARS,       &
00042                                        XT2M, XQ2M, XHU2M, XZON10M, XMER10M,   &
00043                                        XRN, XH, XLE, XGFLUX, XRI, XCD, XCH,   &
00044                                        XCE, XZ0, XZ0H, XQS, XSWD, XSWU, XLWD, &
00045                                        XLWU, XSWBD, XSWBU, XFMU, XFMV, XLEI,  &
00046                                        LSURF_BUDGETC, XT2M_MIN, XT2M_MAX,     &
00047                                        XDIAG_SST, XHU2M_MIN, XHU2M_MAX,       &
00048                                        XWIND10M, XWIND10M_MAX  
00049 !
00050 USE MODI_PARAM_CLS
00051 USE MODI_CLS_TQ
00052 USE MODI_CLS_WIND
00053 USE MODI_DIAG_SURF_BUDGET_SEA
00054 USE MODI_DIAG_SURF_BUDGETC_SEA
00055 USE MODI_DIAG_CPL_ESM_SEA
00056 ! 
00057 !
00058 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00059 USE PARKIND1  ,ONLY : JPRB
00060 !
00061 IMPLICIT NONE
00062 !
00063 !*      0.1    declarations of arguments
00064 !
00065 REAL,               INTENT(IN) :: PTSTEP ! atmospheric time-step                 (s)
00066 REAL, DIMENSION(:), INTENT(IN) :: PTA    ! atmospheric temperature
00067 REAL, DIMENSION(:), INTENT(IN) :: PTS    ! surface temperature
00068 REAL, DIMENSION(:), INTENT(IN) :: PQA    ! atmospheric specific humidity
00069 REAL, DIMENSION(:), INTENT(IN) :: PPA    ! atmospheric level pressure
00070 REAL, DIMENSION(:), INTENT(IN) :: PPS    ! surface pressure
00071 REAL, DIMENSION(:), INTENT(IN) :: PRHOA  ! air density
00072 REAL, DIMENSION(:), INTENT(IN) :: PZONA  ! zonal wind
00073 REAL, DIMENSION(:), INTENT(IN) :: PMERA  ! meridian wind
00074 REAL, DIMENSION(:), INTENT(IN) :: PHT    ! atmospheric level height
00075 REAL, DIMENSION(:), INTENT(IN) :: PHW    ! atmospheric level height for wind
00076 REAL, DIMENSION(:), INTENT(IN) :: PCD    ! drag coefficient for momentum
00077 REAL, DIMENSION(:), INTENT(IN) :: PCDN   ! neutral drag coefficient
00078 REAL, DIMENSION(:), INTENT(IN) :: PCH    ! drag coefficient for heat
00079 REAL, DIMENSION(:), INTENT(IN) :: PCE    ! drag coefficient for vapor
00080 REAL, DIMENSION(:), INTENT(IN) :: PRI    ! Richardson number
00081 REAL, DIMENSION(:), INTENT(IN) :: PHU    ! near-surface humidity
00082 REAL, DIMENSION(:), INTENT(IN) :: PZ0    ! roughness length for momentum
00083 REAL, DIMENSION(:), INTENT(IN) :: PZ0H   ! roughness length for heat
00084 REAL, DIMENSION(:), INTENT(IN) :: PQSAT  ! humidity at saturation
00085 REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction
00086 REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridian friction
00087 REAL, DIMENSION(:), INTENT(IN) :: PSFTH  ! heat flux  (W/m2)
00088 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ  ! water flux (kg/m2/s)
00089 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW   ! direct  solar radiation (on horizontal surf.)
00090 !                                           !                                       (W/m2)
00091 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW   ! diffuse solar radiation (on horizontal surf.)
00092 !                                           !                                       (W/m2)
00093 REAL, DIMENSION(:), INTENT(IN) :: PLW       ! longwave radiation (on horizontal surf.)
00094 REAL, DIMENSION(:), INTENT(IN) :: PTRAD     ! radiative temperature                 (K)
00095 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_ALB  ! direct albedo for each spectral band  (-)
00096 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_ALB  ! diffuse albedo for each spectral band (-)
00097 REAL, DIMENSION(:), INTENT(IN) :: PEMIS     ! emissivity                            (-)
00098 !
00099 REAL, DIMENSION(:), INTENT(IN) :: PRAIN     ! Rainfall (kg/m2/s)
00100 REAL, DIMENSION(:), INTENT(IN) :: PSNOW     ! Snowfall (kg/m2/s)
00101 REAL, DIMENSION(:), INTENT(IN) :: PSFTH_ICE ! heat flux  (W/m2)
00102 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ_ICE ! water flux (kg/m2/s)
00103 REAL, DIMENSION(:), INTENT(IN) :: PTICE     ! Ice Surface Temperature
00104 !
00105 !*      0.2    declarations of local variables
00106 !
00107 REAL, DIMENSION(SIZE(PTA)) :: ZH
00108 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00109 !-------------------------------------------------------------------------------------
00110 !
00111 IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_SEAFLUX_N',0,ZHOOK_HANDLE)
00112 XDIAG_SST(:) = PTS(:)
00113 !
00114 IF (.NOT. LSBL) THEN
00115 !
00116   IF (N2M==1) THEN        
00117     CALL PARAM_CLS(PTA, PTS, PQA, PPA, PRHOA, PZONA, PMERA, PHT, PHW, &
00118                      PSFTH, PSFTQ, PSFZON, PSFMER,                       &
00119                      XT2M, XQ2M, XHU2M, XZON10M, XMER10M                )  
00120   ELSE IF (N2M==2) THEN
00121     ZH(:)=2.          
00122     CALL CLS_TQ(PTA, PQA, PPA, PPS, PHT,         &
00123                   PCD, PCH, PRI,                   &
00124                   PTS, PHU, PZ0H, ZH,              &
00125                   XT2M, XQ2M, XHU2M                )  
00126     ZH(:)=10.                
00127     CALL CLS_WIND(PZONA, PMERA, PHW,             &
00128                     PCD, PCDN, PRI, ZH,            &
00129                     XZON10M, XMER10M               )  
00130   END IF
00131 !
00132   IF (N2M>=1) THEN
00133     !
00134     XT2M_MIN(:) = MIN(XT2M_MIN(:),XT2M(:))
00135     XT2M_MAX(:) = MAX(XT2M_MAX(:),XT2M(:))
00136     !
00137     XHU2M_MIN(:) = MIN(XHU2M_MIN(:),XHU2M(:))
00138     XHU2M_MAX(:) = MAX(XHU2M_MAX(:),XHU2M(:))
00139     !
00140     XWIND10M    (:) = SQRT(XZON10M**2+XMER10M**2)
00141     XWIND10M_MAX(:) = MAX(XWIND10M_MAX(:),XWIND10M(:))
00142     !
00143     !* Richardson number
00144     XRI = PRI
00145     !
00146   ENDIF
00147 !
00148 ELSE
00149   IF (N2M>=1) THEN
00150     XT2M    = XUNDEF
00151     XQ2M    = XUNDEF
00152     XHU2M   = XUNDEF
00153     XZON10M = XUNDEF
00154     XMER10M = XUNDEF
00155     XRI     = PRI        
00156   ENDIF
00157 ENDIF
00158 !
00159 IF (LSURF_BUDGET.OR.LSURF_BUDGETC) THEN
00160   !
00161   CALL  DIAG_SURF_BUDGET_SEA   (XTTS, PTS, PRHOA, PSFTH, PSFTQ,       &
00162                                   PDIR_SW, PSCA_SW, PLW,                &
00163                                   PDIR_ALB, PSCA_ALB, PEMIS, PTRAD,     &
00164                                   PSFZON, PSFMER,                       &
00165                                   XRN, XH, XLE, XLEI, XGFLUX,           &
00166                                   XSWD, XSWU, XSWBD, XSWBU, XLWD, XLWU, &
00167                                   XFMU, XFMV                            )  
00168   !
00169 END IF
00170 !
00171 IF(LSURF_BUDGETC)THEN
00172   CALL DIAG_SURF_BUDGETC_SEA(PTSTEP, XRN, XH, XLE, XLEI, XGFLUX, &
00173                                XSWD, XSWU, XLWD, XLWU, XFMU, XFMV  )  
00174 ENDIF
00175 !
00176 IF (LCOEF) THEN
00177   !
00178   !* Transfer coefficients
00179   !
00180   XCD = PCD
00181   XCH = PCH
00182   XCE = PCE
00183   !
00184   !* Roughness lengths
00185   !
00186   XZ0  = PZ0
00187   XZ0H = PZ0H
00188 !
00189 ENDIF
00190 !
00191 IF (LSURF_VARS) THEN
00192   !
00193   !* Humidity at saturation
00194   !
00195   XQS = PQSAT
00196 !
00197 ENDIF
00198 !
00199 ! Diag for Earth System Model coupling
00200 !
00201 IF (LCPL_ESM) THEN
00202 !
00203   CALL DIAG_CPL_ESM_SEA(PTSTEP,XZON10M,XMER10M,XFMU,XFMV,  &
00204                           XSWD,XSWU,XGFLUX,PSFTQ,PRAIN,      &
00205                           PSNOW,PLW,PTICE,PSFTH_ICE,         &
00206                           PSFTQ_ICE,PDIR_SW,PSCA_SW          )                          
00207 ! 
00208 ENDIF
00209 IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_SEAFLUX_N',1,ZHOOK_HANDLE)
00210 !
00211 !-------------------------------------------------------------------------------------
00212 !
00213 END SUBROUTINE DIAG_INLINE_SEAFLUX_n