SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/canopy_evol_neutral.F90
Go to the documentation of this file.
00001 !     #########################################
00002       SUBROUTINE CANOPY_EVOL_NEUTRAL(KI,KLVL,PTSTEP,KIMPL,PWIND,PRHOA, &
00003                              PSFLUX_U,                                 &
00004                              PFORC_U,PDFORC_UDU,PFORC_E,PDFORC_EDE,    &
00005                              PZ,PZF,PDZ,PDZF,PU,PTKE,PUSTAR,           &
00006                              PALFAU,PBETAU                             )
00007 !     #########################################
00008 !
00009 !!****  *CANOPY_EVOL* - evolution of canopy
00010 !!                        
00011 !!
00012 !!    PURPOSE
00013 !!    -------
00014 !!
00015 !!**  METHOD
00016 !!    ------
00017 !!
00018 !!    EXTERNAL
00019 !!    --------
00020 !!
00021 !!
00022 !!    IMPLICIT ARGUMENTS
00023 !!    ------------------
00024 !!
00025 !!    REFERENCE
00026 !!    ---------
00027 !!
00028 !!
00029 !!    AUTHOR
00030 !!    ------
00031 !!      V. Masson   *Meteo France*      
00032 !!
00033 !!    MODIFICATIONS
00034 !!    -------------
00035 !!      Original    05/2010 
00036 !-------------------------------------------------------------------------------
00037 !
00038 !*       0.    DECLARATIONS
00039 !              ------------
00040 !
00041 USE MODD_CSTS,        ONLY : XKARMAN
00042 USE MODD_SURF_PAR,    ONLY : XUNDEF
00043 USE MODD_CANOPY_TURB, ONLY : XCMFS, XALPSBL, XCED
00044 !
00045 USE MODI_CANOPY_EVOL_WIND
00046 USE MODI_CANOPY_EVOL_TKE
00047 !
00048 USE MODE_SBLS
00049 !
00050 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00051 USE PARKIND1  ,ONLY : JPRB
00052 !
00053 IMPLICIT NONE
00054 !
00055 !*       0.1   Declarations of arguments
00056 !              -------------------------
00057 !
00058 INTEGER,                  INTENT(IN)    :: KI        ! number of horizontal points
00059 INTEGER,                  INTENT(IN)    :: KLVL      ! number of levels in canopy
00060 REAL,                     INTENT(IN)    :: PTSTEP    ! atmospheric time-step                 (s)
00061 INTEGER,                  INTENT(IN)    :: KIMPL     ! implicitation code: 
00062 !                                                    ! 1 : computes only alfa and beta coupling
00063 !                                                    !     coefficients for all variables
00064 !                                                    ! 2 : computes temporal evolution of the
00065 !                                                    !     variables
00066 REAL, DIMENSION(KI),      INTENT(IN)    :: PWIND     ! wind speed                            (m/s)
00067 REAL, DIMENSION(KI),      INTENT(IN)    :: PRHOA     ! Air density at forcing level          (kg/m3)
00068 REAL, DIMENSION(KI),      INTENT(IN)    :: PSFLUX_U  ! surface flux u'w'                     (m2/s2)
00069 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PFORC_U   ! tendency of wind due to canopy drag   (m/s2)
00070 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PDFORC_UDU! formal derivative of the tendency of
00071 !                                                    ! wind due to canopy drag               (1/s)
00072 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PFORC_E   ! tendency of TKE  due to canopy drag   (m2/s3)
00073 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PDFORC_EDE! formal derivative of the tendency of
00074 !                                                    ! TKE  due to canopy drag               (1/s)
00075 !
00076 REAL, DIMENSION(KI,KLVL), INTENT(INOUT) :: PZ        ! heights of canopy levels              (m)
00077 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PZF       ! heights of bottom of canopy levels    (m)
00078 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PDZ       ! depth   of canopy levels              (m)
00079 REAL, DIMENSION(KI,KLVL), INTENT(IN)    :: PDZF      ! depth between canopy levels           (m)
00080 REAL, DIMENSION(KI,KLVL), INTENT(INOUT) :: PU        ! wind speed at canopy levels           (m/s)
00081 REAL, DIMENSION(KI,KLVL), INTENT(INOUT) :: PTKE      ! TKE at canopy levels                  (m2/s2)
00082 REAL, DIMENSION(KI),      INTENT(OUT)   :: PUSTAR    ! friction velocity at forcing level    (m/s)
00083 REAL, DIMENSION(KI),      INTENT(OUT)   :: PALFAU   ! V+(1) = alfa u'w'(1) + beta
00084 REAL, DIMENSION(KI),      INTENT(OUT)   :: PBETAU   ! V+(1) = alfa u'w'(1) + beta
00085 !
00086 !*       0.2   Declarations of local variables
00087 !              -------------------------------
00088 !
00089 INTEGER :: JLAYER                 ! loop counter on layers
00090 INTEGER :: JI                     ! loop counter
00091 !
00092 REAL, DIMENSION(KI,KLVL) :: ZK       ! mixing coefficient
00093 REAL, DIMENSION(KI,KLVL) :: ZDKDDVDZ ! formal derivative of mixing coefficient according to variable vertical gradient
00094 REAL, DIMENSION(KI,KLVL) :: ZEXN     ! Exner function        at full levels
00095 REAL, DIMENSION(KI,KLVL) :: ZUW      ! friction at mid levels
00096 REAL, DIMENSION(KI,KLVL) :: ZTH      ! temperature(meaningless here)
00097 REAL, DIMENSION(KI,KLVL) :: ZWTH     ! heat  flux (supposed equal to zero)
00098 REAL, DIMENSION(KI,KLVL) :: ZWQ      ! vapor flux (supposed equal to zero)
00099 REAL, DIMENSION(KI,KLVL) :: ZLEPS    ! Dissipative length at full levels
00100 REAL, DIMENSION(KI,KLVL) :: ZZ       ! height above displacement height
00101 REAL, DIMENSION(KI,KLVL) :: ZLM      ! Mixing      length at mid levels
00102 REAL, DIMENSION(KI)      :: ZUSTAR   ! friction velocity (estimated from
00103 !                                    ! fluxes at atmospheric forcing level)
00104 !
00105 REAL                     :: ZZ0      ! a value of z0 just for first time-step init.
00106 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00107 !
00108 !-------------------------------------------------------------------------------
00109 !
00110 !*    1. First time step initialization
00111 !        ------------------------------
00112 !
00113 !* first time step (i.e. wind profile is initially zero) : 
00114 !  set a neutral wind profile in relation with forcing wind
00115 IF (LHOOK) CALL DR_HOOK('CANOPY_EVOL_NEUTRAL',0,ZHOOK_HANDLE)
00116 DO JI=1,KI
00117   IF(PWIND(JI)>0. .AND. PU(JI,KLVL-1)==0.) THEN
00118     ZZ0 = PZ(JI,1)/2.
00119     PU(JI,:) = PWIND(JI) * LOG (PZ(JI,:)/ZZ0) / LOG (PZ(JI,KLVL)/ZZ0)
00120   END IF
00121 END DO
00122 !-------------------------------------------------------------------------------
00123 !
00124 !*    2. mixing and dissipative lengths (at full levels)
00125 !        ------------------------------
00126 !
00127 !* influence of ground surface on mixing length in neutral case
00128 DO JLAYER=1,KLVL
00129   ZLM  (:,JLAYER) = XKARMAN/SQRT(XALPSBL)/XCMFS * PZ(:,JLAYER)
00130   ZLEPS(:,JLAYER) = XKARMAN*(XALPSBL**1.5)*XCED * PZ(:,JLAYER)
00131 END DO
00132 !
00133 !-------------------------------------------------------------------------------
00134 !
00135 !*    3. time evolution of wind in canopy
00136 !        --------------------------------
00137 !
00138 !*    3.1 mixing coefficient for wind at mid layers (at half levels)
00139 !         ---------------------------
00140 !
00141 ZK = -999.
00142 DO JLAYER=2,KLVL
00143   ZK(:,JLAYER) = 0.5 * XCMFS * ZLM(:,JLAYER)   * SQRT(PTKE(:,JLAYER)  ) &
00144                + 0.5 * XCMFS * ZLM(:,JLAYER-1) * SQRT(PTKE(:,JLAYER-1)) 
00145 END DO
00146 !
00147 !
00148 !*    3.2 mixing coefficient vertical derivative at mid layers (at half levels)
00149 !         --------------------------------------
00150 !
00151 !* there is no formal dependency on wind
00152 ZDKDDVDZ = 0.
00153 !
00154 !
00155 !*    3.3  time evolution of wind in canopy
00156 !          --------------------------------
00157 !
00158  CALL CANOPY_EVOL_WIND(KI,KLVL,PTSTEP,KIMPL,PWIND,ZK,ZDKDDVDZ,PSFLUX_U,PFORC_U,PDFORC_UDU,PDZ,PDZF,PU,ZUW,PALFAU,PBETAU)
00159 !
00160 !*    3.4  Friction velocity at top of SBL layers
00161 !          --------------------------------------
00162 !
00163 PUSTAR = SQRT(ABS(ZUW(:,KLVL)))
00164 !
00165 !-------------------------------------------------------------------------------
00166 !
00167 !*    4. time evolution of TKE in canopy
00168 !        -------------------------------
00169 !
00170 !* neutral case, no thermal production
00171 ZWTH = 0.
00172 ZWQ  = 0.
00173 ZTH  = 300.
00174 !
00175  CALL CANOPY_EVOL_TKE(KI,KLVL,PTSTEP,PRHOA,PZ,PZF,PDZ,PDZF,PFORC_E,PDFORC_EDE, &
00176                      PU,ZTH,ZUW,ZWTH,ZWQ,ZLEPS,PTKE                           )
00177 !
00178 !-------------------------------------------------------------------------------
00179 !
00180 !*    5. Security at atmospheric forcing level
00181 !        -------------------------------------
00182 !
00183 PU(:,KLVL) = PWIND(:)
00184 IF (LHOOK) CALL DR_HOOK('CANOPY_EVOL_NEUTRAL',1,ZHOOK_HANDLE)
00185 !
00186 !-------------------------------------------------------------------------------
00187 END SUBROUTINE CANOPY_EVOL_NEUTRAL
00188 
00189