SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/coupling_isba_canopyn.F90
Go to the documentation of this file.
00001 !     ###############################################################################
00002 SUBROUTINE COUPLING_ISBA_CANOPY_n(HPROGRAM, HCOUPLING,                                     &
00003                PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, &
00004                PAZIM, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV,          &
00005                PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA,                   &
00006                PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV,                                    &
00007                PTRAD, PDIR_ALB, PSCA_ALB, PEMIS,                                           &
00008                PPEW_A_COEF, PPEW_B_COEF,                                                   &
00009                PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF,                         &
00010                HTEST                                                                       )
00011 !     ###############################################################################
00012 !
00013 !!****  *COUPLING_ISBA_CANOPY_n * - Adds a SBL into ISBA
00014 !!
00015 !!    PURPOSE
00016 !!    -------
00017 !
00018 !!**  METHOD
00019 !!    ------
00020 !!
00021 !!    REFERENCE
00022 !!    ---------
00023 !!      
00024 !!
00025 !!    AUTHOR
00026 !!    ------
00027 !!     V. Masson 
00028 !!
00029 !!    MODIFICATIONS
00030 !!    -------------
00031 !!      Original    09/2007
00032 !!      S. Riette   06/2009 Initialisation of XT, XQ, XU and XTKE on canopy levels
00033 !!      S. Riette   01/2010 Use of interpol_sbl to compute 10m wind diagnostic
00034 !!      Modified    09/2012  : J. Escobar , SIZE(PTA) not allowed without-interface , replace by KI
00035 !----------------------------------------------------------------
00036 !
00037 USE MODD_CSTS,          ONLY : XCPD
00038 USE MODD_ISBA_n,        ONLY : LCANOPY, LCANOPY_DRAG, CROUGH, XZ0, XLAI, XPATCH, &
00039                                XSSO_STDEV, XSSO_SLOPE, XZ0_O_Z0H, XTG, CISBA,    &
00040                                TSNOW, CCPSURF, XWFC, XVEG, XGAMMA, XRSMIN, XWR,  &
00041                                XWRMAX_CF, XRESA, XRGL, XWSAT, XWG, XWGI
00042 USE MODD_ISBA_CANOPY_n, ONLY : XZ, XU, NLVL, XTKE, XT, XQ, XLMO, XZF, XDZ, XDZF, XP
00043 USE MODD_DIAG_ISBA_n,   ONLY : N2M, XAVG_T2M, XAVG_Q2M, XAVG_HU2M,               &
00044                                XAVG_ZON10M, XAVG_MER10M, XAVG_WIND10M,           &
00045                                XAVG_WIND10M_MAX, XAVG_T2M_MIN, XAVG_T2M_MAX,     &
00046                                XAVG_HU2M_MIN, XAVG_HU2M_MAX,                     &
00047                                LSURF_BUDGET, XAVG_FMU, XAVG_FMV
00048 USE MODD_SURF_PAR,      ONLY : XUNDEF
00049 USE MODD_CANOPY_TURB,   ONLY : XALPSBL
00050 !
00051 USE MODE_COUPLING_CANOPY
00052 !
00053 USE MODI_INIT_ISBA_SBL
00054 !
00055 USE MODI_CANOPY_EVOL
00056 USE MODI_CANOPY_GRID_UPDATE
00057 !
00058 USE MODI_COUPLING_ISBA_n
00059 !
00060 USE MODI_ISBA_CANOPY
00061 USE MODI_SSO_BELJAARS04
00062 !
00063 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00064 USE PARKIND1  ,ONLY : JPRB
00065 !
00066 IMPLICIT NONE
00067 !
00068 !*      0.1    declarations of arguments
00069 !
00070  CHARACTER(LEN=6),    INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00071  CHARACTER(LEN=1),    INTENT(IN)  :: HCOUPLING ! type of coupling
00072                                               ! 'E' : explicit
00073                                               ! 'I' : implicit
00074 INTEGER,             INTENT(IN)  :: KYEAR     ! current year (UTC)
00075 INTEGER,             INTENT(IN)  :: KMONTH    ! current month (UTC)
00076 INTEGER,             INTENT(IN)  :: KDAY      ! current day (UTC)
00077 REAL,                INTENT(IN)  :: PTIME     ! current time since midnight (UTC, s)
00078 INTEGER,             INTENT(IN)  :: KI        ! number of points
00079 INTEGER,             INTENT(IN)  :: KSV       ! number of scalars
00080 INTEGER,             INTENT(IN)  :: KSW       ! number of short-wave spectral bands
00081 REAL, DIMENSION(KI), INTENT(IN)  :: PTSUN     ! solar time                    (s from midnight)
00082 REAL,                INTENT(IN)  :: PTSTEP    ! atmospheric time-step                 (s)
00083 REAL, DIMENSION(KI), INTENT(IN)  :: PZREF     ! height of T,q forcing                 (m)
00084 REAL, DIMENSION(KI), INTENT(IN)  :: PUREF     ! height of wind forcing                (m)
00085 !
00086 REAL, DIMENSION(KI), INTENT(IN)  :: PTA       ! air temperature forcing               (K)
00087 REAL, DIMENSION(KI), INTENT(IN)  :: PQA       ! air humidity forcing                  (kg/m3)
00088 REAL, DIMENSION(KI), INTENT(IN)  :: PRHOA     ! air density                           (kg/m3)
00089 REAL, DIMENSION(KI,KSV),INTENT(IN) :: PSV     ! scalar variables
00090 !                                             ! chemistry:   first char. in HSV: '#'  (molecule/m3)
00091 !                                             !
00092  CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: HSV  ! name of all scalar variables
00093 REAL, DIMENSION(KI), INTENT(IN)  :: PU        ! zonal wind                            (m/s)
00094 REAL, DIMENSION(KI), INTENT(IN)  :: PV        ! meridian wind                         (m/s)
00095 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PDIR_SW ! direct  solar radiation (on horizontal surf.)
00096 !                                             !                                       (W/m2)
00097 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
00098 !                                             !                                       (W/m2)
00099 REAL, DIMENSION(KSW),INTENT(IN)  :: PSW_BANDS ! mean wavelength of each shortwave band (m)
00100 REAL, DIMENSION(KI), INTENT(IN)  :: PZENITH   ! zenithal angle at t       (radian from the vertical)
00101 REAL, DIMENSION(KI), INTENT(IN)  :: PZENITH2  ! zenithal angle at t+1     (radian from the vertical)
00102 REAL, DIMENSION(KI), INTENT(IN)  :: PAZIM     ! azimuthal angle      (radian from North, clockwise)
00103 REAL, DIMENSION(KI), INTENT(IN)  :: PLW       ! longwave radiation (on horizontal surf.)
00104 !                                             !                                       (W/m2)
00105 REAL, DIMENSION(KI), INTENT(IN)  :: PPS       ! pressure at atmospheric model surface (Pa)
00106 REAL, DIMENSION(KI), INTENT(IN)  :: PPA       ! pressure at forcing level             (Pa)
00107 REAL, DIMENSION(KI), INTENT(IN)  :: PZS       ! atmospheric model CANOPY           (m)
00108 REAL, DIMENSION(KI), INTENT(IN)  :: PCO2      ! CO2 concentration in the air          (kg/m3)
00109 REAL, DIMENSION(KI), INTENT(IN)  :: PSNOW     ! snow precipitation                    (kg/m2/s)
00110 REAL, DIMENSION(KI), INTENT(IN)  :: PRAIN     ! liquid precipitation                  (kg/m2/s)
00111 !
00112 !
00113 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTH     ! flux of heat                          (W/m2)
00114 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTQ     ! flux of water vapor                   (kg/m2/s)
00115 REAL, DIMENSION(KI), INTENT(OUT) :: PSFU      ! zonal momentum flux                   (Pa)
00116 REAL, DIMENSION(KI), INTENT(OUT) :: PSFV      ! meridian momentum flux                (Pa)
00117 REAL, DIMENSION(KI), INTENT(OUT) :: PSFCO2    ! flux of CO2                           (kg/m2/s)
00118 REAL, DIMENSION(KI,KSV),INTENT(OUT):: PSFTS   ! flux of scalar var.                   (kg/m2/s)
00119 !
00120 REAL, DIMENSION(KI), INTENT(OUT) :: PTRAD     ! radiative temperature                 (K)
00121 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PDIR_ALB! direct albedo for each spectral band  (-)
00122 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PSCA_ALB! diffuse albedo for each spectral band (-)
00123 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS     ! emissivity                            (-)
00124 !
00125 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_A_COEF! implicit coefficients
00126 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_B_COEF! needed if HCOUPLING='I'
00127 REAL, DIMENSION(KI), INTENT(IN) :: PPET_A_COEF
00128 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_A_COEF
00129 REAL, DIMENSION(KI), INTENT(IN) :: PPET_B_COEF
00130 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_B_COEF
00131  CHARACTER(LEN=2),    INTENT(IN) :: HTEST ! must be equal to 'OK'
00132 !
00133 !*      0.2    declarations of local variables
00134 !
00135 !* forcing variables
00136 !
00137 REAL, DIMENSION(KI)     :: ZWIND    ! lowest atmospheric level wind speed           (m/s)
00138 REAL, DIMENSION(KI)     :: ZEXNA    ! Exner function at lowest SBL scheme level     (-)
00139 REAL, DIMENSION(KI)     :: ZTA      ! temperature                                   (K)
00140 REAL, DIMENSION(KI)     :: ZPA      ! pressure                                      (Pa)
00141 REAL, DIMENSION(KI)     :: ZZREF    ! temperature forcing level                     (m)
00142 REAL, DIMENSION(KI)     :: ZUREF    ! wind        forcing level                     (m)
00143 REAL, DIMENSION(KI)     :: ZU       ! zonal wind                                    (m/s)
00144 REAL, DIMENSION(KI)     :: ZV       ! meridian wind                                 (m/s)
00145 REAL, DIMENSION(KI)     :: ZQA      ! specific humidity                             (kg/m3)
00146 REAL, DIMENSION(KI)     :: ZPEQ_A_COEF ! specific humidity implicit
00147 REAL, DIMENSION(KI)     :: ZPEQ_B_COEF ! coefficients (hum. in kg/kg)
00148 !
00149 !
00150 ! canopy turbulence scheme
00151 !
00152 REAL, DIMENSION(KI)        :: ZCANOPY   ! height of canopy   (m)
00153 REAL, DIMENSION(KI)        :: ZSFLUX_U  ! Surface flux u'w' (m2/s2)
00154 REAL, DIMENSION(KI)        :: ZSFLUX_T  ! Surface flux w'T' (mK/s)
00155 REAL, DIMENSION(KI)        :: ZSFLUX_Q  ! Surface flux w'q' (kgm2/s)
00156 REAL, DIMENSION(KI,NLVL)   :: ZFORC_U   ! tendency due to drag force for wind
00157 REAL, DIMENSION(KI,NLVL)   :: ZDFORC_UDU! formal derivative of
00158 !                                              ! tendency due to drag force for wind
00159 REAL, DIMENSION(KI,NLVL)   :: ZFORC_E   ! tendency due to drag force for TKE
00160 REAL, DIMENSION(KI,NLVL)   :: ZDFORC_EDE! formal derivative of
00161 !                                              ! tendency due to drag force for TKE
00162 REAL, DIMENSION(KI,NLVL)   :: ZFORC_T   ! tendency due to drag force for Temp
00163 REAL, DIMENSION(KI,NLVL)   :: ZDFORC_TDT! formal derivative of
00164 !                                              ! tendency due to drag force for Temp
00165 REAL, DIMENSION(KI,NLVL)   :: ZFORC_Q   ! tendency due to drag force for Temp
00166 REAL, DIMENSION(KI,NLVL)   :: ZDFORC_QDQ! formal derivative of
00167 !                                              ! tendency due to drag force for hum.
00168 REAL, DIMENSION(KI,NLVL)   :: ZLMO      ! MO length
00169 REAL, DIMENSION(KI,NLVL)   :: ZLM       ! mixing length
00170 REAL, DIMENSION(KI,NLVL)   :: ZLEPS     ! dissipative length
00171 REAL, DIMENSION(KI)     :: ZH           ! canopy height (m)
00172 REAL, DIMENSION(KI)     :: ZUSTAR       ! friction velocity including drag effect (m/s)
00173 REAL, DIMENSION(KI)     :: ZUSTAR_GROUND! friction velocity at ground only (ISBA) (m/s)
00174 !
00175 REAL, DIMENSION(KI)     :: ZPET_A_COEF ! temperature implicit
00176 REAL, DIMENSION(KI)     :: ZPET_B_COEF ! coefficients (K)
00177 REAL, DIMENSION(KI)     :: ZPEW_A_COEF ! wind implicit
00178 REAL, DIMENSION(KI)     :: ZPEW_B_COEF ! coefficients (m/s)
00179 !
00180 REAL, DIMENSION(KI)   :: ZALFAU   ! V+(1) = - alfa rho u'w'(1) + beta
00181 REAL, DIMENSION(KI)   :: ZBETAU   ! V+(1) = - alfa rho u'w'(1) + beta
00182 REAL, DIMENSION(KI)   :: ZALFATH  ! Th+(1) = - alfa rho w'th'(1) + beta
00183 REAL, DIMENSION(KI)   :: ZBETATH  ! Th+(1) = - alfa rho w'th'(1) + beta
00184 REAL, DIMENSION(KI)   :: ZALFAQ   ! Q+(1) = - alfa rho w'q'(1) + beta
00185 REAL, DIMENSION(KI)   :: ZBETAQ   ! Q+(1) = - alfa rho w'q'(1) + beta
00186 !
00187  CHARACTER(LEN=1) :: GCOUPLING
00188 !
00189 REAL, DIMENSION(KI)   ::ZCANOPY_DENSITY
00190 REAL, DIMENSION(KI)   ::ZUW_GROUND
00191 REAL, DIMENSION(KI)   ::ZDUWDU_GROUND
00192 !
00193 REAL, DIMENSION(KI,NLVL)   :: ZZ        ! height above displacement height
00194 !
00195 INTEGER                      :: JJ
00196 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00197 
00198 !-------------------------------------------------------------------------------------
00199 !
00200 !
00201 !*      1.     Preliminary computations of the SBL scheme
00202 !              ------------------------------------------
00203 !
00204 IF (LHOOK) CALL DR_HOOK('COUPLING_ISBA_CANOPY_N',0,ZHOOK_HANDLE)
00205 IF (LCANOPY) THEN
00206 !
00207 !*      1.1    Updates canopy vertical grid as a function of forcing height
00208 !              ------------------------------------------------------------
00209 !
00210 !* determines where is the forcing level and modifies the upper levels of the canopy grid
00211 !
00212   ZCANOPY = 0.
00213   CALL CANOPY_GRID_UPDATE(KI,NLVL,ZCANOPY,PUREF,XZ,XZF,XDZ,XDZF)
00214 !
00215 !
00216 !
00217 !*      1.2    Allocations and initialisations
00218 !              -------------------------------
00219 !
00220 !
00221 !       1.2.1  First time step canopy initialisation
00222 !
00223   IF(ANY(XT(:,:) == XUNDEF)) THEN
00224     CALL INIT_ISBA_SBL(CISBA, CCPSURF, NLVL, PPA, PPS, PTA, PQA, PRHOA, PU, PV,           &
00225                        PDIR_SW, PSCA_SW, PSW_BANDS, PRAIN, PSNOW,                         &
00226                        PZREF, PUREF, XTG(:,1,:), XPATCH, XWG(:,1,:), XWGI(:,1,:),         &
00227                        XZ0, XSSO_SLOPE, XRESA, XVEG, XLAI, XWR, XRGL, XRSMIN,             &
00228                        XGAMMA, XWRMAX_CF, XZ0_O_Z0H, XWFC, XWSAT, TSNOW, XZ,              &
00229                        XT, XQ, XU, XTKE, XP)
00230   ENDIF
00231 !
00232 !*      1.3    Allocations
00233 !              -----------
00234 !
00235   CALL INIT_FORC( ZFORC_U, ZDFORC_UDU, ZFORC_E, ZDFORC_EDE, &
00236                  ZFORC_T, ZDFORC_TDT, ZFORC_Q, ZDFORC_QDQ )
00237 !
00238   ZSFLUX_U = 0.
00239   ZSFLUX_T = 0.
00240   ZSFLUX_Q = 0.
00241 !
00242   ZLMO = SPREAD(XLMO,2,NLVL)
00243 !
00244 !* default :
00245 !* no canopy in ISBA scheme
00246 !
00247   ZH = 0.
00248 !
00249 !
00250 !* determine for each level the height above displacement height
00251 !
00252   ZZ(:,:) = XZ(:,:)
00253 !
00254 !*      1.4   canopy for wind drag only
00255 !             -------------------------
00256 !
00257   IF (LCANOPY_DRAG) THEN
00258 !* mean canopy height
00259 !
00260 !* in ecoclimap, height is set retrieved from roughness length (z0/0.13)
00261     ZH = SUM(XPATCH(:,:)*XZ0(:,:)/0.13,DIM=2)
00262     ZH = MIN(ZH, XZF(:,NLVL))
00263     WHERE (ZH<=XDZ(:,1)) ZH = 0.
00264 !
00265 !* canopy for wind drag only
00266     ZCANOPY_DENSITY = SUM(XPATCH(:,:)*XLAI(:,:),DIM=2)
00267     ZUW_GROUND      = 0.
00268     ZDUWDU_GROUND   = 0.
00269 !
00270 !* computes tendencies on wind and Tke due to canopy
00271     CALL ISBA_CANOPY(KI,NLVL,XZ,XZF,XDZ,XDZF,ZH,ZCANOPY_DENSITY,XU,XTKE,    &
00272                     ZUW_GROUND, ZDUWDU_GROUND,                              &
00273                     ZFORC_U,ZDFORC_UDU,ZFORC_E,ZDFORC_EDE                   )
00274 !
00275   ENDIF
00276 !
00277 !*      1.4   Subgrid-scale orographic drag (Beljaars et al 2004)
00278 !             -----------------------------
00279 !
00280   IF (CROUGH=='BE04') THEN
00281 !
00282 !* computes tendencies on wind and Tke due to subgridscale orography
00283     CALL SSO_BELJAARS04(KI,NLVL,XZ,XSSO_STDEV,XU,ZFORC_U,ZDFORC_UDU )
00284 !
00285   ENDIF
00286 !
00287 !
00288 !*      1.5   Computes coefficients for implicitation
00289 !             ---------------------------------------
00290 !
00291   ZWIND = SQRT(PU**2+PV**2)
00292   CALL CANOPY_EVOL(KI,NLVL,PTSTEP,1,ZZ,ZWIND,PTA,PQA,PPA,PRHOA,             &
00293                    ZSFLUX_U,ZSFLUX_T,ZSFLUX_Q,                              &
00294                    ZFORC_U,ZDFORC_UDU,ZFORC_E,ZDFORC_EDE,                   &
00295                    ZFORC_T,ZDFORC_TDT,ZFORC_Q,ZDFORC_QDQ,                   &
00296                    XZ,XZF,XDZ,XDZF,XU,XTKE,XT,XQ,ZLMO,ZLM,ZLEPS,XP,ZUSTAR,  &
00297                    ZALFAU,ZBETAU,ZALFATH,ZBETATH,ZALFAQ,ZBETAQ              )
00298 !
00299 !*     1.6     Goes from atmospheric forcing to canopy forcing height
00300 !              ------------------------------------------------------
00301 !
00302   GCOUPLING ='I'
00303 !
00304   CALL INIT_COUPLING_CANOPY( XP(:,1), PPA, XT(:,1), XQ(:,1), &
00305                            PU, PV, XZ(:,1), XU(:,1),         &
00306                            PRHOA, ZALFAU, ZBETAU, ZALFATH,   &
00307                            ZBETATH, ZALFAQ, ZBETAQ,          &
00308                            ZPA, ZTA, ZQA, ZU, ZV,            &
00309                            ZUREF, ZZREF, ZEXNA,              &
00310                            ZPEW_A_COEF, ZPEW_B_COEF,         &
00311                            ZPET_A_COEF, ZPET_B_COEF,         &
00312                            ZPEQ_A_COEF, ZPEQ_B_COEF          )
00313 !
00314 !-------------------------------------------------------------------------------------
00315 ELSE
00316 !-------------------------------------------------------------------------------------
00317 !
00318 !*      2.     If no canopy scheme is used, forcing is not modified
00319 !              ----------------------------------------------------
00320 !
00321   GCOUPLING = HCOUPLING
00322 !
00323   CALL INIT_COUPLING( HCOUPLING,                  &
00324                       PPS, PPA, PTA, PQA, PU, PV, &
00325                       PUREF, PZREF,               &
00326                       PPEW_A_COEF, PPEW_B_COEF,   &
00327                       PPET_A_COEF, PPET_B_COEF,   &
00328                       PPEQ_A_COEF, PPEQ_B_COEF,   &
00329                       ZPA, ZTA, ZQA, ZU, ZV,      &
00330                       ZUREF, ZZREF,               &
00331                       ZPEW_A_COEF, ZPEW_B_COEF,   &
00332                       ZPET_A_COEF, ZPET_B_COEF,   &
00333                       ZPEQ_A_COEF, ZPEQ_B_COEF    ) 
00334 ! 
00335 END IF
00336 !
00337 !-------------------------------------------------------------------------------------
00338 !
00339 !*      2.     Call of ISBA
00340 !              ------------
00341 !
00342  CALL COUPLING_ISBA_n(HPROGRAM, GCOUPLING,                                                  &
00343              PTSTEP, KYEAR, KMONTH, KDAY, PTIME,                                           &
00344              KI, KSV, KSW,                                                                 &
00345              PTSUN, PZENITH, PZENITH2,                                                     &
00346              ZZREF, ZUREF, PZS, ZU, ZV, ZQA, ZTA, PRHOA, PSV, PCO2,                        &
00347              PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, ZPA,                     &
00348              PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV,                                      &
00349              PTRAD, PDIR_ALB, PSCA_ALB, PEMIS,                                             &
00350              ZPEW_A_COEF, ZPEW_B_COEF,                                                     &
00351              ZPET_A_COEF, ZPEQ_A_COEF, ZPET_B_COEF, ZPEQ_B_COEF,                           &
00352              'OK'                                                                          )
00353 !
00354 !-------------------------------------------------------------------------------------
00355 !
00356 !*      3.     End if no canopy is used
00357 !              ------------------------
00358 !
00359 IF (.NOT. LCANOPY .AND. LHOOK) CALL DR_HOOK('COUPLING_ISBA_CANOPY_N',1,ZHOOK_HANDLE)
00360 IF (.NOT. LCANOPY) RETURN
00361 !
00362 !-------------------------------------------------------------------------------------
00363 !
00364 !*      4.     Computes the impact of surface on air
00365 !              -------------------------------------
00366 !
00367  CALL INIT_FORC( ZFORC_U, ZDFORC_UDU, ZFORC_E, ZDFORC_EDE, &
00368                ZFORC_T, ZDFORC_TDT, ZFORC_Q, ZDFORC_QDQ )
00369 !
00370 ZSFLUX_U = - SQRT(PSFU(:)**2+PSFV(:)**2) / PRHOA(:)
00371 ZSFLUX_T(:) = PSFTH(:) / XCPD * ZEXNA(:) / PRHOA(:)
00372 ZSFLUX_Q(:) = PSFTQ(:)
00373 !
00374 !-------------------------------------------------------------------------------------
00375 !
00376 !*      5.     Computes the impact of canopy on air
00377 !              ------------------------------------
00378 !
00379 IF (LCANOPY_DRAG) THEN
00380 !
00381   ZUW_GROUND    = -SQRT(PSFU**2+PSFV**2)/ PRHOA(:)
00382   ZDUWDU_GROUND = 0.
00383   WHERE (XU(:,1)   /=0.) ZDUWDU_GROUND = 2. * ZUW_GROUND / XU(:,1)
00384 
00385 !* computes tendencies on wind and Tke due to canopy and surface
00386   CALL ISBA_CANOPY(KI,NLVL,XZ,XZF,XDZ,XDZF,ZH,ZCANOPY_DENSITY,XU,XTKE,  &
00387                   ZUW_GROUND, ZDUWDU_GROUND,                            &
00388                   ZFORC_U,ZDFORC_UDU,ZFORC_E,ZDFORC_EDE                 )
00389 
00390   ZSFLUX_U = 0.  ! surface friction is incorporated in ZFORC_U by ISBA_CANOPY routine
00391 !
00392 END IF
00393 !
00394 !
00395 IF (CROUGH=='BE04') THEN
00396 !
00397 !* computes tendencies on wind and Tke due to subgridscale orography
00398   CALL SSO_BELJAARS04(KI,NLVL,XZ,XSSO_STDEV,XU,ZFORC_U,ZDFORC_UDU     )
00399 !
00400 ENDIF
00401 !
00402 !-------------------------------------------------------------------------------------
00403 !
00404 !*      6.    Evolution of canopy air due to these impacts
00405 !             --------------------------------------------
00406 !
00407 ZWIND = SQRT(PU**2+PV**2)
00408  CALL CANOPY_EVOL(KI,NLVL,PTSTEP,2,ZZ,ZWIND,PTA,PQA,PPA,PRHOA,                 &
00409                  ZSFLUX_U,ZSFLUX_T,ZSFLUX_Q,                                  &
00410                  ZFORC_U,ZDFORC_UDU,ZFORC_E,ZDFORC_EDE,                       &
00411                  ZFORC_T,ZDFORC_TDT,ZFORC_Q,ZDFORC_QDQ,                       &
00412                  XZ,XZF,XDZ,XDZF,XU,XTKE,XT,XQ,ZLMO,ZLM,ZLEPS,XP,ZUSTAR,       &
00413                  ZALFAU,ZBETAU,ZALFATH,ZBETATH,ZALFAQ,ZBETAQ                  )
00414 !
00415 XLMO(:) = ZLMO(:,NLVL)
00416 !
00417 ! Momentum fluxes if canopy is used
00418 !
00419 !* Total friction due to surface averaged friction and averaged canopy drag
00420 IF (LCANOPY_DRAG .OR. CROUGH=='BE04') THEN
00421   ZUSTAR_GROUND=SQRT(SQRT(PSFU**2+PSFV**2)/PRHOA)
00422   WHERE (ZUSTAR_GROUND(:)>0.)
00423     PSFU(:) = PSFU(:) * ZUSTAR**2/ZUSTAR_GROUND**2
00424     PSFV(:) = PSFV(:) * ZUSTAR**2/ZUSTAR_GROUND**2
00425   END WHERE
00426 !* Total friction due to surface averaged friction and averaged canopy drag
00427   IF (LSURF_BUDGET) THEN
00428     XAVG_FMU = PSFU
00429     XAVG_FMV = PSFV          
00430   ENDIF
00431 END IF
00432 !
00433 !-------------------------------------------------------------------------------------
00434 !
00435 !*      7.    2m and 10m diagnostics if canopy is used
00436 !             ----------------------------------------
00437 !
00438 !
00439 IF (N2M>=1) CALL INIT_2M_10M( XP(:,2), XT(:,2), XQ(:,2),  XU, XZ, &
00440                               PU, PV, ZWIND, PRHOA,               &
00441                               XAVG_T2M, XAVG_Q2M, XAVG_HU2M, XAVG_ZON10M, XAVG_MER10M, &
00442                               XAVG_WIND10M, XAVG_WIND10M_MAX, XAVG_T2M_MIN,            &
00443                               XAVG_T2M_MAX, XAVG_HU2M_MIN, XAVG_HU2M_MAX )
00444 !
00445 IF (LHOOK) CALL DR_HOOK('COUPLING_ISBA_CANOPY_N',1,ZHOOK_HANDLE)
00446 !
00447 !-------------------------------------------------------------------------------------
00448 !
00449 END SUBROUTINE COUPLING_ISBA_CANOPY_n