SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/z0v_from_lai.F90
Go to the documentation of this file.
00001 !#######################
00002 MODULE MODI_Z0V_FROM_LAI
00003 !#######################
00004 !
00005 INTERFACE Z0V_FROM_LAI
00006 !
00007     FUNCTION Z0V_FROM_LAI_0D(PLAI,PH_TREE,PVEGTYPE) RESULT(PZ0)
00008 !
00009 REAL,                 INTENT(IN) :: PLAI         ! Leaf area Index
00010 REAL,                 INTENT(IN) :: PH_TREE      ! height of trees
00011 REAL,   DIMENSION(:), INTENT(IN) :: PVEGTYPE     ! type of vegetation
00012 !
00013 REAL                             :: PZ0          ! vegetation roughness
00014 !
00015 END FUNCTION Z0V_FROM_LAI_0D
00016 !
00017 !
00018     FUNCTION Z0V_FROM_LAI_1D(PLAI,PH_TREE,PVEGTYPE) RESULT(PZ0)
00019 !
00020 REAL,   DIMENSION(:),   INTENT(IN) :: PLAI         ! Leaf area Index
00021 REAL,   DIMENSION(:),   INTENT(IN) :: PH_TREE      ! height of trees
00022 REAL,   DIMENSION(:,:), INTENT(IN) :: PVEGTYPE     ! type of vegetation
00023 !
00024 REAL,   DIMENSION(SIZE(PLAI))      :: PZ0          ! vegetation roughness
00025 !
00026 END FUNCTION Z0V_FROM_LAI_1D
00027 !
00028 !
00029     FUNCTION Z0V_FROM_LAI_2D(PLAI,PH_TREE,PVEGTYPE) RESULT(PZ0)
00030 !
00031 REAL,   DIMENSION(:,:),   INTENT(IN) :: PLAI         ! Leaf area Index
00032 REAL,   DIMENSION(:,:),   INTENT(IN) :: PH_TREE      ! height of trees
00033 REAL,   DIMENSION(:,:,:), INTENT(IN) :: PVEGTYPE     ! type of vegetation
00034 !
00035 REAL,   DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2)) :: PZ0  ! vegetation roughness
00036 !
00037 END FUNCTION Z0V_FROM_LAI_2D
00038 !
00039     FUNCTION Z0V_FROM_LAI_PATCH(PLAI,PH_TREE,PVEGTYPE) RESULT(PZ0)
00040 !
00041 REAL,   DIMENSION(:),   INTENT(IN) :: PLAI         ! Leaf area Index
00042 REAL,   DIMENSION(:),   INTENT(IN) :: PH_TREE      ! height of trees
00043 REAL,   DIMENSION(:),   INTENT(IN) :: PVEGTYPE     ! type of vegetation
00044 !
00045 REAL,   DIMENSION(SIZE(PLAI)) :: PZ0  ! vegetation roughness
00046 !
00047 END FUNCTION Z0V_FROM_LAI_PATCH
00048 !
00049 END INTERFACE
00050 !
00051 END MODULE MODI_Z0V_FROM_LAI
00052 !
00053 
00054 !   ###########################################################
00055     FUNCTION Z0V_FROM_LAI_0D(PLAI,PH_TREE,PVEGTYPE) RESULT(PZ0)
00056 !   ###########################################################
00057 !!
00058 !!    PURPOSE
00059 !!    -------
00060 !
00061 !     Calculates vegetation roughness from leaf
00062 !    area index and type of vegetation
00063 !    (most of types; forest and vineyards; grassland)
00064 !              
00065 !!**  METHOD
00066 !!    ------
00067 !!
00068 !!    EXTERNAL
00069 !!    --------
00070 !!    none
00071 !!
00072 !!    IMPLICIT ARGUMENTS
00073 !!    ------------------
00074 !!      
00075 !!    none
00076 !!
00077 !!    REFERENCE
00078 !!    ---------
00079 !!
00080 !!      
00081 !!    AUTHOR
00082 !!    ------
00083 !!
00084 !!      V. Masson and A. Boone          * Meteo-France *
00085 !!
00086 !!    MODIFICATIONS
00087 !!    -------------
00088 !!      Original    25/03/99
00089 !!      P. Aumond      10/10/2009     Because drag force applied in atmospheric 
00090 !!                                    model, Z0tree -> z0grass
00091 !!
00092 !-------------------------------------------------------------------------------
00093 !
00094 !*       0.     DECLARATIONS
00095 !               ------------
00096 !
00097 USE MODD_SURF_PAR,       ONLY : XUNDEF
00098 USE MODD_DATA_COVER_PAR, ONLY : NVT_NO, NVT_ROCK, NVT_SNOW,   &
00099                                   NVT_C3, NVT_C4, NVT_IRR,      &
00100                                   NVT_CONI, NVT_TREE, NVT_EVER, &
00101                                   NVT_TROG, NVT_PARK, NVT_GRAS  
00102 USE MODD_TREEDRAG,       ONLY : LTREEDRAG
00103 !
00104 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00105 USE PARKIND1  ,ONLY : JPRB
00106 !
00107 IMPLICIT NONE
00108 !
00109 !*      0.1    declarations of arguments
00110 !
00111 REAL,                 INTENT(IN) :: PLAI         ! Leaf area Index
00112 REAL,                 INTENT(IN) :: PH_TREE      ! height of trees
00113 REAL,   DIMENSION(:), INTENT(IN) :: PVEGTYPE     ! type of vegetation
00114 !
00115 REAL                             :: PZ0          ! vegetation roughness
00116 !
00117 !*      0.2    declarations of local variables
00118 !
00119 REAL                            :: ZALLEN_H    ! Allen formula for height
00120 REAL                            :: ZLAI        ! LAI for vegetated areas
00121 !
00122 REAL, DIMENSION(SIZE(PVEGTYPE)) :: ZH          ! height for each type
00123 REAL                            :: ZAVG_H      ! averaged height
00124 REAL                            :: ZZREF       ! reference height        
00125 !
00126 INTEGER                         :: JTYPE       ! loop counter
00127 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00128 !-----------------------------------------------------------------
00129 !
00130 IF (LHOOK) CALL DR_HOOK('MODI_Z0V_FROM_LAI:Z0V_FROM_LAI_0D',0,ZHOOK_HANDLE)
00131 ZLAI = PLAI
00132 IF ( PVEGTYPE(NVT_NO  ) + PVEGTYPE(NVT_ROCK) + PVEGTYPE(NVT_SNOW) < 1.) THEN
00133   ZLAI = PLAI / (1.-PVEGTYPE(NVT_NO)-PVEGTYPE(NVT_ROCK)-PVEGTYPE(NVT_SNOW))
00134 END IF
00135 !
00136 ZALLEN_H = 0.
00137 IF ( PLAI /= XUNDEF) THEN
00138   ZALLEN_H = EXP((ZLAI-3.5)/(1.3))
00139 END IF
00140 !
00141 ZH(NVT_PARK) = ZLAI / 6.                    ! irr. grassland
00142 ZH(NVT_C4  ) = MIN(2.5, ZALLEN_H )          ! C4 types
00143 ZH(NVT_IRR ) = MIN(2.5, ZALLEN_H )          ! irrigated crops (as C4)
00144 IF (LTREEDRAG) THEN
00145   ZH(NVT_TREE) = ZLAI / 6.                  ! forest
00146   ZH(NVT_CONI) = ZLAI / 6.                  ! forest
00147   ZH(NVT_EVER) = ZLAI / 6.                  ! forest
00148 ELSE
00149   ZH(NVT_TREE) = PH_TREE                    ! forest
00150   ZH(NVT_CONI) = PH_TREE                    ! forest
00151   ZH(NVT_EVER) = PH_TREE                    ! forest
00152 END IF
00153 ZH(NVT_GRAS) = ZLAI / 6.                    ! grassland
00154 ZH(NVT_TROG) = ZLAI / 6.                    ! tropical grassland
00155 ZH(NVT_C3  ) = MIN(1. , ZALLEN_H )          ! cultures
00156 ZH(NVT_NO  ) = 0.1                          ! no vegetation (smooth)
00157 ZH(NVT_ROCK) = 1.                           ! no vegetation (rocks)
00158 ZH(NVT_SNOW) = 0.01                         ! no vegetation (snow)
00159 !
00160 ZH(:) = MAX(ZH(:),0.001)
00161 !
00162 ZZREF = 10.
00163 ZAVG_H = 0.
00164 DO JTYPE=1,SIZE(PVEGTYPE)
00165   ZAVG_H = ZAVG_H + PVEGTYPE(JTYPE) / (LOG(0.13*ZH(JTYPE)/ZZREF))**2
00166 END DO
00167 ZAVG_H = MAX(ZAVG_H,0.00001)
00168 
00169 ZAVG_H = ZZREF / 0.13 * EXP (-1./SQRT(ZAVG_H))
00170 !
00171 PZ0  = MAX(0.001, 0.13*ZAVG_H)
00172 IF (LHOOK) CALL DR_HOOK('MODI_Z0V_FROM_LAI:Z0V_FROM_LAI_0D',1,ZHOOK_HANDLE)
00173 !
00174 !-----------------------------------------------------------------
00175 !
00176 END FUNCTION Z0V_FROM_LAI_0D
00177 !
00178 !   ###########################################################
00179     FUNCTION Z0V_FROM_LAI_1D(PLAI,PH_TREE,PVEGTYPE) RESULT(PZ0)
00180 !   ###########################################################
00181 !!
00182 !!    PURPOSE
00183 !!    -------
00184 !
00185 !     Calculates vegetation roughness from leaf
00186 !    area index and type of vegetation
00187 !    (most of types; forest and vineyards; grassland)
00188 !              
00189 !!**  METHOD
00190 !!    ------
00191 !!
00192 !!    EXTERNAL
00193 !!    --------
00194 !!    none
00195 !!
00196 !!    IMPLICIT ARGUMENTS
00197 !!    ------------------
00198 !!      
00199 !!    none
00200 !!
00201 !!    REFERENCE
00202 !!    ---------
00203 !!
00204 !!      
00205 !!    AUTHOR
00206 !!    ------
00207 !!
00208 !!      V. Masson and A. Boone          * Meteo-France *
00209 !!
00210 !!    MODIFICATIONS
00211 !!    -------------
00212 !!      Original    25/03/99
00213 !!
00214 !-------------------------------------------------------------------------------
00215 !
00216 !*       0.     DECLARATIONS
00217 !               ------------
00218 !
00219 USE MODD_SURF_PAR,       ONLY : XUNDEF
00220 USE MODD_DATA_COVER_PAR, ONLY : NVT_NO, NVT_ROCK, NVT_SNOW,   &
00221                                   NVT_C3, NVT_C4, NVT_IRR,      &
00222                                   NVT_CONI, NVT_TREE, NVT_EVER, &
00223                                   NVT_TROG, NVT_PARK, NVT_GRAS  
00224 USE MODD_TREEDRAG,       ONLY : LTREEDRAG
00225 !
00226 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00227 USE PARKIND1  ,ONLY : JPRB
00228 !
00229 IMPLICIT NONE
00230 !
00231 !*      0.1    declarations of arguments
00232 !
00233 REAL,   DIMENSION(:),   INTENT(IN) :: PLAI         ! Leaf area Index
00234 REAL,   DIMENSION(:),   INTENT(IN) :: PH_TREE      ! height of trees
00235 REAL,   DIMENSION(:,:), INTENT(IN) :: PVEGTYPE     ! type of vegetation
00236 !
00237 REAL,   DIMENSION(SIZE(PLAI))      :: PZ0          ! vegetation roughness
00238 !
00239 !*      0.2    declarations of local variables
00240 !
00241 REAL, DIMENSION(SIZE(PLAI))                  :: ZALLEN_H    ! Allen formula for height
00242 REAL, DIMENSION(SIZE(PLAI))                  :: ZLAI        ! LAI for vegetated areas
00243 !
00244 REAL, DIMENSION(SIZE(PLAI),SIZE(PVEGTYPE,2)) :: ZH          ! height for each type
00245 REAL, DIMENSION(SIZE(PLAI))                  :: ZAVG_H      ! averaged height
00246 REAL                                         :: ZZREF       ! reference height        
00247 !
00248 INTEGER                                      :: JTYPE       ! loop counter
00249 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00250 !-----------------------------------------------------------------
00251 !
00252 IF (LHOOK) CALL DR_HOOK('MODI_Z0V_FROM_LAI:Z0V_FROM_LAI_1D',0,ZHOOK_HANDLE)
00253 ZH(:,:) = XUNDEF
00254 !
00255 ZLAI(:) = PLAI(:)
00256 WHERE ( PVEGTYPE(:,NVT_NO  ) + PVEGTYPE(:,NVT_ROCK) + PVEGTYPE(:,NVT_SNOW) < 1.) 
00257   ZLAI(:) = PLAI(:) / (1.-PVEGTYPE(:,NVT_NO)-PVEGTYPE(:,NVT_ROCK)-PVEGTYPE(:,NVT_SNOW))
00258 END WHERE
00259 !
00260 ZALLEN_H(:) = 0.
00261 WHERE (PLAI(:) /= XUNDEF)
00262   ZALLEN_H(:) = EXP((ZLAI(:)-3.5)/(1.3))
00263 END WHERE
00264 !
00265 !
00266 ZH(:,NVT_PARK) = ZLAI(:) / 6.                 ! irr. grassland
00267 ZH(:,NVT_C4  ) = MIN(2.5, ZALLEN_H(:) )       ! C4 types
00268 ZH(:,NVT_IRR ) = MIN(2.5, ZALLEN_H(:) )       ! irrigated crops (as C4)
00269 IF (LTREEDRAG) THEN
00270   ZH(:,NVT_TREE) = ZLAI(:) / 6.               ! forest
00271   ZH(:,NVT_CONI) = ZLAI(:) / 6.               ! forest
00272   ZH(:,NVT_EVER) = ZLAI(:) / 6.               ! forest
00273 ELSE
00274   ZH(:,NVT_TREE) = PH_TREE(:)                 ! forest
00275   ZH(:,NVT_CONI) = PH_TREE(:)                 ! forest
00276   ZH(:,NVT_EVER) = PH_TREE(:)                 ! forest
00277 END IF
00278 ZH(:,NVT_GRAS) = ZLAI(:) / 6.                 ! grassland
00279 ZH(:,NVT_TROG) = ZLAI(:) / 6.                 ! tropical grassland
00280 ZH(:,NVT_C3  ) = MIN(1. , ZALLEN_H(:) )       ! cultures
00281 ZH(:,NVT_NO  ) = 0.1                          ! no vegetation (smooth)
00282 ZH(:,NVT_ROCK) = 1.                           ! no vegetation (rocks)
00283 ZH(:,NVT_SNOW) = 0.01                         ! no vegetation (snow)
00284 !
00285 ZH(:,:) = MAX(ZH(:,:),0.001)
00286 !
00287 ZZREF = 10.
00288 ZAVG_H(:) = 0.
00289 DO JTYPE=1,SIZE(PVEGTYPE,2)
00290   ZAVG_H(:) = ZAVG_H(:) + PVEGTYPE(:,JTYPE) / (LOG(0.13*ZH(:,JTYPE)/ZZREF))**2
00291 END DO
00292 
00293 ZAVG_H = MAX(ZAVG_H,0.00001)
00294 
00295 ZAVG_H(:) = ZZREF / 0.13 * EXP (-1./SQRT(ZAVG_H(:)))
00296 !
00297 PZ0 (:) = MAX(0.001, 0.13*ZAVG_H(:))
00298 IF (LHOOK) CALL DR_HOOK('MODI_Z0V_FROM_LAI:Z0V_FROM_LAI_1D',1,ZHOOK_HANDLE)
00299 !-----------------------------------------------------------------
00300 !
00301 END FUNCTION Z0V_FROM_LAI_1D
00302 !
00303 !   ###########################################################
00304     FUNCTION Z0V_FROM_LAI_2D(PLAI,PH_TREE,PVEGTYPE) RESULT(PZ0)
00305 !   ###########################################################
00306 !!
00307 !!    PURPOSE
00308 !!    -------
00309 !
00310 !     Calculates vegetation roughness from leaf
00311 !    area index and type of vegetation
00312 !    (most of types; forest and vineyards; grassland)
00313 !              
00314 !!**  METHOD
00315 !!    ------
00316 !!
00317 !!    EXTERNAL
00318 !!    --------
00319 !!    none
00320 !!
00321 !!    IMPLICIT ARGUMENTS
00322 !!    ------------------
00323 !!      
00324 !!    none
00325 !!
00326 !!    REFERENCE
00327 !!    ---------
00328 !!
00329 !!      
00330 !!    AUTHOR
00331 !!    ------
00332 !!
00333 !!      V. Masson and A. Boone          * Meteo-France *
00334 !!
00335 !!    MODIFICATIONS
00336 !!    -------------
00337 !!      Original    25/03/99
00338 !!
00339 !-------------------------------------------------------------------------------
00340 !
00341 !*       0.     DECLARATIONS
00342 !               ------------
00343 !
00344 USE MODD_DATA_COVER_PAR, ONLY : NVT_NO, NVT_ROCK, NVT_SNOW,   &
00345                                   NVT_C3, NVT_C4, NVT_IRR,      &
00346                                   NVT_CONI, NVT_TREE, NVT_EVER, &
00347                                   NVT_TROG, NVT_PARK, NVT_GRAS  
00348 USE MODD_SURF_PAR,       ONLY : XUNDEF
00349 USE MODD_TREEDRAG,       ONLY : LTREEDRAG
00350 !
00351 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00352 USE PARKIND1  ,ONLY : JPRB
00353 !
00354 IMPLICIT NONE
00355 !
00356 !*      0.1    declarations of arguments
00357 !
00358 REAL,   DIMENSION(:,:),   INTENT(IN) :: PLAI         ! Leaf area Index
00359 REAL,   DIMENSION(:,:),   INTENT(IN) :: PH_TREE      ! height of trees
00360 REAL,   DIMENSION(:,:,:), INTENT(IN) :: PVEGTYPE     ! type of vegetation
00361 !
00362 REAL,   DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2)) :: PZ0  ! vegetation roughness
00363 !
00364 !*      0.2    declarations of local variables
00365 !
00366 
00367 REAL, DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2))                  :: ZALLEN_H ! Allen formula for height
00368 REAL, DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2))                  :: ZLAI     ! LAI for vegetated areas
00369 !
00370 REAL, DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2),SIZE(PVEGTYPE,3)) :: ZH       ! height for each type
00371 REAL, DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2))                  :: ZAVG_H   ! averaged height
00372 REAL                                                        :: ZZREF    ! reference height        
00373 !
00374 INTEGER                                                     :: JTYPE    ! loop counter
00375 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00376 !-----------------------------------------------------------------
00377 !
00378 IF (LHOOK) CALL DR_HOOK('MODI_Z0V_FROM_LAI:Z0V_FROM_LAI_2D',0,ZHOOK_HANDLE)
00379 ZH(:,:,:)=XUNDEF
00380 !
00381 ZLAI(:,:) = PLAI(:,:)
00382 WHERE ( PVEGTYPE(:,:,NVT_NO  ) + PVEGTYPE(:,:,NVT_ROCK) + PVEGTYPE(:,:,NVT_SNOW) < 1.) 
00383   ZLAI(:,:) = PLAI(:,:) / (1.-PVEGTYPE(:,:,NVT_NO)-PVEGTYPE(:,:,NVT_ROCK)-PVEGTYPE(:,:,NVT_SNOW))
00384 END WHERE
00385 !
00386 ZALLEN_H(:,:) = 0.
00387 WHERE(PLAI(:,:)/=XUNDEF)
00388   ZALLEN_H(:,:) = EXP((ZLAI(:,:)-3.5)/(1.3))
00389 END WHERE
00390 !
00391 !
00392 ZH(:,:,NVT_PARK) = ZLAI(:,:) / 6.               ! irr. grassland
00393 ZH(:,:,NVT_C4  ) = MIN(2.5, ZALLEN_H(:,:) )     ! C4 types
00394 ZH(:,:,NVT_IRR ) = MIN(2.5, ZALLEN_H(:,:) )     ! irrigated crops (as C4)
00395 IF (LTREEDRAG) THEN
00396   ZH(:,:,NVT_TREE) = ZLAI(:,:) / 6.             ! forest
00397   ZH(:,:,NVT_CONI) = ZLAI(:,:) / 6.             ! forest
00398   ZH(:,:,NVT_EVER) = ZLAI(:,:) / 6.             ! forest
00399 ELSE
00400   ZH(:,:,NVT_TREE) = PH_TREE(:,:)               ! forest
00401   ZH(:,:,NVT_CONI) = PH_TREE(:,:)               ! forest
00402   ZH(:,:,NVT_EVER) = PH_TREE(:,:)               ! forest
00403 END IF
00404 ZH(:,:,NVT_GRAS) = ZLAI(:,:) / 6.               ! grassland
00405 ZH(:,:,NVT_TROG) = ZLAI(:,:) / 6.               ! tropical grassland
00406 ZH(:,:,NVT_C3  ) = MIN(1. , ZALLEN_H(:,:) )     ! cultures
00407 ZH(:,:,NVT_NO  ) = 0.1                          ! no vegetation (smooth)
00408 ZH(:,:,NVT_ROCK) = 1.                           ! no vegetation (rocks)
00409 ZH(:,:,NVT_SNOW) = 0.01                         ! no vegetation (snow)
00410 !
00411 ZH(:,:,:) = MAX(ZH(:,:,:),0.001)
00412 !
00413 ZZREF = 10.
00414 ZAVG_H(:,:) = 0.
00415 DO JTYPE=1,SIZE(PVEGTYPE,3)
00416   ZAVG_H(:,:) = ZAVG_H(:,:) + PVEGTYPE(:,:,JTYPE) / (LOG(0.13*ZH(:,:,JTYPE)/ZZREF))**2
00417 END DO
00418 ZAVG_H(:,:) = MAX(ZAVG_H(:,:),0.00001)
00419 ZAVG_H(:,:) = ZZREF / 0.13 * EXP (-1./SQRT(ZAVG_H(:,:)))
00420 !
00421 PZ0 (:,:) = MAX(0.001, 0.13*ZAVG_H(:,:))
00422 !
00423 WHERE (PLAI(:,:) == XUNDEF)
00424   PZ0(:,:) = XUNDEF
00425 END WHERE
00426 IF (LHOOK) CALL DR_HOOK('MODI_Z0V_FROM_LAI:Z0V_FROM_LAI_2D',1,ZHOOK_HANDLE)
00427 !-----------------------------------------------------------------
00428 !
00429 END FUNCTION Z0V_FROM_LAI_2D
00430 !
00431 !
00432 !
00433 !   ###########################################################
00434     FUNCTION Z0V_FROM_LAI_PATCH(PLAI,PH_TREE,PVEGTYPE) RESULT(PZ0)
00435 !   ###########################################################
00436 !!
00437 !!    PURPOSE
00438 !!    -------
00439 !
00440 !     Calculates vegetation roughness from leaf
00441 !    area index and type of vegetation for each patch
00442 !    (most of types; forest and vineyards; grassland)
00443 !              
00444 !!**  METHOD
00445 !!    ------
00446 !!
00447 !!    EXTERNAL
00448 !!    --------
00449 !!    none
00450 !!
00451 !!    IMPLICIT ARGUMENTS
00452 !!    ------------------
00453 !!      
00454 !!    none
00455 !!
00456 !!    REFERENCE
00457 !!    ---------
00458 !!
00459 !!      
00460 !!    AUTHOR
00461 !!    ------
00462 !!        F.Solmon
00463 !!      V. Masson and A. Boone          * Meteo-France *
00464 !!
00465 !!    MODIFICATIONS
00466 !!    -------------
00467 !!      Original    25/03/99
00468 !!      
00469 !-------------------------------------------------------------------------------
00470 !
00471 !*       0.     DECLARATIONS
00472 !               ------------
00473 !
00474 USE MODD_DATA_COVER_PAR, ONLY : NVT_NO, NVT_ROCK, NVT_SNOW,   &
00475                                   NVT_C3, NVT_C4, NVT_IRR,      &
00476                                   NVT_CONI, NVT_TREE, NVT_EVER, &
00477                                   NVT_TROG, NVT_PARK, NVT_GRAS  
00478 USE MODD_SURF_PAR,       ONLY : XUNDEF
00479 USE MODD_TREEDRAG,       ONLY : LTREEDRAG
00480 !
00481 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00482 USE PARKIND1  ,ONLY : JPRB
00483 !
00484 IMPLICIT NONE
00485 !
00486 !*      0.1    declarations of arguments
00487 !
00488 REAL,   DIMENSION(:),   INTENT(IN) :: PLAI         ! Leaf area Index
00489 REAL,   DIMENSION(:),   INTENT(IN) :: PH_TREE      ! height of trees
00490 REAL,   DIMENSION(:),   INTENT(IN) :: PVEGTYPE     ! type of vegetation
00491 !
00492 REAL,   DIMENSION(SIZE(PLAI))      :: PZ0          ! vegetation roughness
00493 !
00494 !*      0.2    declarations of local variables
00495 !
00496 REAL, DIMENSION(SIZE(PLAI)) :: ZALLEN_H    ! Allen formula for height
00497 !
00498 REAL, DIMENSION(SIZE(PLAI)) :: ZH          ! height for each type
00499 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00500 !-----------------------------------------------------------------
00501 !
00502 IF (LHOOK) CALL DR_HOOK('MODI_Z0V_FROM_LAI:Z0V_FROM_LAI_PATCH',0,ZHOOK_HANDLE)
00503 ZH(:) = XUNDEF
00504 !
00505 WHERE (PLAI(:)/= XUNDEF)
00506   ZALLEN_H(:) = EXP((PLAI(:)-3.5)/(1.3))
00507 END WHERE
00508 !
00509 !
00510 IF (PVEGTYPE(NVT_PARK)>0.) ZH(NVT_PARK) = PLAI(NVT_PARK) / 6.          ! irr. grasslands
00511 IF (PVEGTYPE(NVT_C4  )>0.) ZH(NVT_C4  ) = MIN(2.5, ZALLEN_H(NVT_C4) )  ! C4 types
00512 IF (PVEGTYPE(NVT_IRR )>0.) ZH(NVT_IRR ) = MIN(2.5, ZALLEN_H(NVT_IRR) ) ! irrigated crops (as C4)
00513 IF (LTREEDRAG) THEN
00514   IF (PVEGTYPE(NVT_TREE)>0.) ZH(NVT_TREE) = PLAI(NVT_TREE) / 6.        ! broadleaf forest
00515   IF (PVEGTYPE(NVT_CONI)>0.) ZH(NVT_CONI) = PLAI(NVT_CONI) / 6.        ! coniferous forest
00516   IF (PVEGTYPE(NVT_EVER)>0.) ZH(NVT_EVER) = PLAI(NVT_EVER) / 6.        ! euqatorial forest
00517 ELSE
00518   IF (PVEGTYPE(NVT_TREE)>0.) ZH(NVT_TREE) = PH_TREE(NVT_TREE)          ! broadleaf forest
00519   IF (PVEGTYPE(NVT_CONI)>0.) ZH(NVT_CONI) = PH_TREE(NVT_CONI)          ! coniferous forest
00520   IF (PVEGTYPE(NVT_EVER)>0.) ZH(NVT_EVER) = PH_TREE(NVT_EVER)          ! euqatorial forest
00521 END IF
00522 IF (PVEGTYPE(NVT_GRAS)>0.) ZH(NVT_GRAS) = PLAI(NVT_GRAS) / 6.          ! grassland
00523 IF (PVEGTYPE(NVT_TROG)>0.) ZH(NVT_TROG) = PLAI(NVT_TROG) / 6.          ! tropical grassland
00524 IF (PVEGTYPE(NVT_C3  )>0.) ZH(NVT_C3  ) = MIN(1. , ZALLEN_H(NVT_C3) )  ! cultures
00525 IF (PVEGTYPE(NVT_NO  )>0.) ZH(NVT_NO  ) = 0.1                          ! no vegetation (smooth)
00526 IF (PVEGTYPE(NVT_ROCK)>0.) ZH(NVT_ROCK) = 1.                           ! no vegetation (rocks)
00527 IF (PVEGTYPE(NVT_SNOW)>0.) ZH(NVT_SNOW) = 0.01                         ! no vegetation (snow)
00528 !
00529 ZH(:) = MAX(ZH(:),0.001)
00530 !
00531 PZ0 (:) = MAX(0.001, 0.13*ZH(:)) ! rugosite pour chaque vegtype
00532 !-----------------------------------------------------------------
00533 !
00534 WHERE (PLAI(:) == XUNDEF)
00535   PZ0(:) = XUNDEF
00536 END WHERE
00537 IF (LHOOK) CALL DR_HOOK('MODI_Z0V_FROM_LAI:Z0V_FROM_LAI_PATCH',1,ZHOOK_HANDLE)
00538 !
00539 !
00540 END FUNCTION Z0V_FROM_LAI_PATCH
00541 !