SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/rmc01_surf.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE RMC01_SURF(PZ, PLMO, PLK, PLEPS, ONEUTRAL)
00003 !     ##############################################################
00004 !
00005 !!****  *RMC01_SURF* -
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!    This routine modifies the mixing and dissipative length near the SBL.
00010 !!    (Redelsperger, Mahe and Carlotti, 2001)
00011 !!
00012 !!**  METHOD
00013 !!    ------
00014 !!
00015 !!    EXTERNAL
00016 !!    --------
00017 !!
00018 !!    IMPLICIT ARGUMENTS
00019 !!    ------------------
00020 !!
00021 !!
00022 !!    REFERENCE
00023 !!    ---------
00024 !!
00025 !!      Book 2
00026 !!
00027 !!    AUTHOR
00028 !!    ------
00029 !!
00030 !!      V. Masson  - Meteo-France -
00031 !!
00032 !!    MODIFICATIONS
00033 !!    -------------
00034 !!     Original     07/2006
00035 !-------------------------------------------------------------------------------
00036 !
00037 !*       0.    DECLARATIONS
00038 !              ------------
00039 !
00040 USE MODD_SURF_PAR,    ONLY : XUNDEF
00041 USE MODD_CSTS,        ONLY : XKARMAN
00042 USE MODD_CANOPY_TURB, ONLY : XALPSBL, XCMFS, XCED
00043 !
00044 USE MODE_SBLS
00045 !
00046 !
00047 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00048 USE PARKIND1  ,ONLY : JPRB
00049 !
00050 IMPLICIT NONE
00051 !
00052 !*       0.1   Declaration of arguments
00053 !              ------------------------
00054 !
00055 REAL, DIMENSION(:,:),   INTENT(IN)  :: PZ   ! altitude of full levels
00056 REAL, DIMENSION(:,:),   INTENT(IN)  :: PLMO ! Monin Obuhkov length
00057 REAL, DIMENSION(:,:),   INTENT(OUT) :: PLK  ! Mixing length
00058 REAL, DIMENSION(:,:),   INTENT(OUT) :: PLEPS! Dissipative length
00059 LOGICAL, OPTIONAL,      INTENT(IN)  :: ONEUTRAL
00060 !
00061 !*       0.2   Declaration of local variables
00062 !              ------------------------------
00063 !
00064 LOGICAL :: GNEUTRAL
00065 !
00066 INTEGER :: JK        ! loop counter
00067 !
00068 REAL, DIMENSION(SIZE(PZ,1),SIZE(PZ,2)) :: ZZ_O_LMO ! height / LMO
00069 REAL, DIMENSION(SIZE(PZ,1),SIZE(PZ,2)) :: ZPHIM    ! MO function
00070                                                    ! for stress
00071 REAL, DIMENSION(SIZE(PZ,1),SIZE(PZ,2)) :: ZPHIE    ! MO function
00072                                                    ! for TKE
00073 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00074 !-------------------------------------------------------------------------------
00075 !
00076 GNEUTRAL = .FALSE.
00077 IF (PRESENT(ONEUTRAL)) GNEUTRAL = ONEUTRAL
00078 !
00079 !*     1. MO quantities
00080 !         -------------
00081 !
00082 ! z/LMO
00083 IF (LHOOK) CALL DR_HOOK('RMC01_SURF',0,ZHOOK_HANDLE)
00084 !
00085 !-------------------------------------------------------------------------------
00086 !
00087 !*     2. Modification of the mixing length
00088 !         ---------------------------------
00089 !
00090 PLK  (:,:) = XKARMAN/SQRT(XALPSBL)/XCMFS * PZ(:,:)  
00091 !
00092 !-------------------------------------------------------------------------------
00093 !
00094 !*     3. Modification of the dissipative length
00095 !         --------------------------------------
00096 !
00097 PLEPS(:,:) = XKARMAN*(XALPSBL**1.5)*XCED * PZ(:,:)
00098 !
00099 !-------------------------------------------------------------------------------
00100 !
00101 IF (GNEUTRAL) THEN
00102   IF (LHOOK) CALL DR_HOOK('RMC01_SURF',1,ZHOOK_HANDLE)
00103   RETURN
00104 ENDIF
00105 !
00106 !-------------------------------------------------------------------------------
00107 !
00108 WHERE (PLMO(:,:)==XUNDEF)
00109   ZZ_O_LMO(:,:)=0.
00110 ELSEWHERE
00111   ZZ_O_LMO(:,:)=PZ(:,:)/PLMO(:,:)
00112 END WHERE
00113 ZZ_O_LMO(:,:) = MAX(ZZ_O_LMO(:,:),-10.)
00114 ZZ_O_LMO(:,:) = MIN(ZZ_O_LMO(:,:), 10.)
00115 !
00116 !
00117 ! MO function for stress
00118 ZPHIM(:,:) = BUSINGER_PHIM(ZZ_O_LMO(:,:))
00119 !
00120 ! MO function for TKE
00121 ZPHIE(:,:) = BUSINGER_PHIE(ZZ_O_LMO(:,:))
00122 !
00123 !-------------------------------------------------------------------------------
00124 !
00125 !*     2. Modification of the mixing length
00126 !         ---------------------------------
00127 !
00128 PLK  (:,:) = PLK  (:,:) / (ZPHIM(:,:)**2*SQRT(ZPHIE(:,:)))  
00129 !
00130 !-------------------------------------------------------------------------------
00131 !
00132 !*     3. Modification of the dissipative length
00133 !         --------------------------------------
00134 !
00135 PLEPS(:,:) = PLEPS(:,:) / (ZPHIM(:,:)**2*SQRT(ZPHIE(:,:))) 
00136 !
00137 WHERE (ZZ_O_LMO(:,:)<0.)
00138   PLEPS(:,:) = PLEPS(:,:)/(1.-1.9*ZZ_O_LMO(:,:))
00139 ELSEWHERE
00140   PLEPS(:,:) = PLEPS(:,:)/(1.-0.3*SQRT(ZZ_O_LMO(:,:)))
00141 ENDWHERE
00142 !
00143 IF (LHOOK) CALL DR_HOOK('RMC01_SURF',1,ZHOOK_HANDLE)
00144 !-------------------------------------------------------------------------------
00145 !
00146 END SUBROUTINE RMC01_SURF