|
SURFEX v7.3
General documentation of Surfex
|
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 !
1.8.0