SURFEX v7.3
General documentation of Surfex
|
00001 !####################### 00002 MODULE MODI_VEG_FROM_LAI 00003 !####################### 00004 ! 00005 INTERFACE VEG_FROM_LAI 00006 ! 00007 FUNCTION VEG_FROM_LAI_0D(PLAI,PVEGTYPE) RESULT(PVEG) 00008 ! 00009 REAL, INTENT(IN) :: PLAI ! Leaf area Index 00010 REAL, DIMENSION(:), INTENT(IN) :: PVEGTYPE ! type of vegetation 00011 ! 00012 REAL :: PVEG ! vegetation fraction 00013 ! 00014 END FUNCTION VEG_FROM_LAI_0D 00015 ! 00016 ! 00017 FUNCTION VEG_FROM_LAI_1D(PLAI,PVEGTYPE) RESULT(PVEG) 00018 ! 00019 REAL, DIMENSION(:), INTENT(IN) :: PLAI ! Leaf area Index 00020 REAL, DIMENSION(:,:), INTENT(IN) :: PVEGTYPE ! type of vegetation 00021 ! 00022 REAL, DIMENSION(SIZE(PLAI)) :: PVEG ! vegetation fraction 00023 ! 00024 END FUNCTION VEG_FROM_LAI_1D 00025 ! 00026 ! 00027 FUNCTION VEG_FROM_LAI_2D(PLAI,PVEGTYPE) RESULT(PVEG) 00028 ! 00029 REAL, DIMENSION(:,:), INTENT(IN) :: PLAI ! Leaf area Index 00030 REAL, DIMENSION(:,:,:), INTENT(IN) :: PVEGTYPE ! type of vegetation 00031 ! 00032 REAL, DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2)) :: PVEG ! vegetation fraction 00033 ! 00034 END FUNCTION VEG_FROM_LAI_2D 00035 ! 00036 00037 FUNCTION VEG_FROM_LAI_PATCH_1D(PLAI,PVEGTYPE) RESULT(PVEG) 00038 ! 00039 REAL, DIMENSION(:), INTENT(IN) :: PLAI ! Leaf area Index for each vegtype 00040 REAL, DIMENSION(:), INTENT(IN) :: PVEGTYPE ! 00041 ! 00042 REAL, DIMENSION(SIZE(PLAI)) :: PVEG ! vegetation fraction 00043 ! 00044 END FUNCTION VEG_FROM_LAI_PATCH_1D 00045 ! 00046 END INTERFACE 00047 ! 00048 END MODULE MODI_VEG_FROM_LAI 00049 ! 00050 ! #################################################### 00051 FUNCTION VEG_FROM_LAI_0D(PLAI,PVEGTYPE) RESULT(PVEG) 00052 ! #################################################### 00053 !! 00054 !! PURPOSE 00055 !! ------- 00056 ! 00057 ! Calculates coverage of soil by vegetation from leaf 00058 ! area index and type of vegetation 00059 ! (most of types; forest and vineyards; grassland) 00060 ! 00061 !!** METHOD 00062 !! ------ 00063 !! 00064 !! EXTERNAL 00065 !! -------- 00066 !! none 00067 !! 00068 !! IMPLICIT ARGUMENTS 00069 !! ------------------ 00070 !! 00071 !! none 00072 !! 00073 !! REFERENCE 00074 !! --------- 00075 !! 00076 !! 00077 !! AUTHOR 00078 !! ------ 00079 !! 00080 !! V. Masson and A. Boone * Meteo-France * 00081 !! 00082 !! MODIFICATIONS 00083 !! ------------- 00084 !! Original 25/03/99 00085 !! 00086 !------------------------------------------------------------------------------- 00087 ! 00088 !* 0. DECLARATIONS 00089 ! ------------ 00090 ! 00091 USE MODD_DATA_COVER_PAR, ONLY : NVT_NO, NVT_ROCK, NVT_SNOW, & 00092 NVT_C3, NVT_C4, NVT_IRR, & 00093 NVT_CONI, NVT_TREE, NVT_EVER, & 00094 NVT_TROG, NVT_PARK, NVT_GRAS 00095 ! 00096 ! 00097 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00098 USE PARKIND1 ,ONLY : JPRB 00099 ! 00100 IMPLICIT NONE 00101 ! 00102 !* 0.1 declarations of arguments 00103 ! 00104 REAL, INTENT(IN) :: PLAI ! Leaf area Index 00105 REAL, DIMENSION(:), INTENT(IN) :: PVEGTYPE ! type of vegetation 00106 ! 00107 REAL :: PVEG ! vegetation fraction 00108 ! 00109 !* 0.2 declarations of local variables 00110 ! 00111 REAL :: ZLAI 00112 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00113 !----------------------------------------------------------------- 00114 IF (LHOOK) CALL DR_HOOK('MODI_VEG_FROM_LAI:VEG_FROM_LAI_0D',0,ZHOOK_HANDLE) 00115 ZLAI = PLAI 00116 IF ( PVEGTYPE(NVT_NO ) + PVEGTYPE(NVT_ROCK) + PVEGTYPE(NVT_SNOW)< 1.) THEN 00117 ZLAI = PLAI / (1.-PVEGTYPE(NVT_NO)-PVEGTYPE(NVT_ROCK)-PVEGTYPE(NVT_SNOW)) 00118 END IF 00119 ! 00120 PVEG = (1. - EXP( -0.6 * ZLAI ))*(PVEGTYPE(NVT_C4 ) + &! C4 crops 00121 PVEGTYPE(NVT_IRR ) + &! irrigated crops 00122 PVEGTYPE(NVT_C3 ) ) &! C3 crops 00123 + 0.95 *(PVEGTYPE(NVT_TREE) + &! brodleaf forest 00124 PVEGTYPE(NVT_CONI) ) &! coniferous forest 00125 + 0.99 * PVEGTYPE(NVT_EVER) &! equatorial forest 00126 + 0.95 *(PVEGTYPE(NVT_GRAS) + &! grassland 00127 PVEGTYPE(NVT_TROG) + &! tropical grass 00128 PVEGTYPE(NVT_PARK) ) &! irr. parks 00129 + 0. * PVEGTYPE(NVT_NO ) &! no vegetation (smooth) 00130 + 0. * PVEGTYPE(NVT_SNOW) &! no vegetation (snow) 00131 + 0. * PVEGTYPE(NVT_ROCK) ! no vegetation (rocks) 00132 IF (LHOOK) CALL DR_HOOK('MODI_VEG_FROM_LAI:VEG_FROM_LAI_0D',1,ZHOOK_HANDLE) 00133 !----------------------------------------------------------------- 00134 ! 00135 END FUNCTION VEG_FROM_LAI_0D 00136 ! 00137 ! #################################################### 00138 FUNCTION VEG_FROM_LAI_1D(PLAI,PVEGTYPE) RESULT(PVEG) 00139 ! #################################################### 00140 !! 00141 !! PURPOSE 00142 !! ------- 00143 ! 00144 ! Calculates coverage of soil by vegetation from leaf 00145 ! area index and type of vegetation 00146 ! (most of types; forest and vineyards; grassland) 00147 ! 00148 !!** METHOD 00149 !! ------ 00150 !! 00151 !! EXTERNAL 00152 !! -------- 00153 !! none 00154 !! 00155 !! IMPLICIT ARGUMENTS 00156 !! ------------------ 00157 !! 00158 !! none 00159 !! 00160 !! REFERENCE 00161 !! --------- 00162 !! 00163 !! 00164 !! AUTHOR 00165 !! ------ 00166 !! 00167 !! V. Masson and A. Boone * Meteo-France * 00168 !! 00169 !! MODIFICATIONS 00170 !! ------------- 00171 !! Original 25/03/99 00172 !! 00173 !------------------------------------------------------------------------------- 00174 ! 00175 !* 0. DECLARATIONS 00176 ! ------------ 00177 ! 00178 USE MODD_DATA_COVER_PAR, ONLY : NVT_NO, NVT_ROCK, NVT_SNOW, & 00179 NVT_C3, NVT_C4, NVT_IRR, & 00180 NVT_CONI, NVT_TREE, NVT_EVER, & 00181 NVT_TROG, NVT_PARK, NVT_GRAS 00182 ! 00183 ! 00184 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00185 USE PARKIND1 ,ONLY : JPRB 00186 ! 00187 IMPLICIT NONE 00188 ! 00189 !* 0.1 declarations of arguments 00190 ! 00191 REAL, DIMENSION(:), INTENT(IN) :: PLAI ! Leaf area Index 00192 REAL, DIMENSION(:,:), INTENT(IN) :: PVEGTYPE ! type of vegetation 00193 ! 00194 REAL, DIMENSION(SIZE(PLAI)) :: PVEG ! vegetation fraction 00195 ! 00196 !* 0.2 declarations of local variables 00197 ! 00198 REAL, DIMENSION(SIZE(PLAI)) :: ZLAI 00199 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00200 !----------------------------------------------------------------- 00201 IF (LHOOK) CALL DR_HOOK('MODI_VEG_FROM_LAI:VEG_FROM_LAI_1D',0,ZHOOK_HANDLE) 00202 ZLAI(:) = PLAI(:) 00203 WHERE ( PVEGTYPE(:,NVT_NO ) + PVEGTYPE(:,NVT_ROCK) + PVEGTYPE(:,NVT_SNOW) < 1.) 00204 ZLAI(:) = PLAI(:) / (1.-PVEGTYPE(:,NVT_NO)-PVEGTYPE(:,NVT_ROCK)-PVEGTYPE(:,NVT_SNOW)) 00205 END WHERE 00206 ! 00207 PVEG(:) = (1. - EXP( -0.6 * ZLAI(:) ))*(PVEGTYPE(:,NVT_C4 ) + &! C4 crops 00208 PVEGTYPE(:,NVT_IRR ) + &! irrigated crops 00209 PVEGTYPE(:,NVT_C3 ) ) &! C3 crops 00210 + 0.95 *(PVEGTYPE(:,NVT_TREE) + &! broadleaf forest 00211 PVEGTYPE(:,NVT_CONI) ) &! coniferous forest 00212 + 0.99 * PVEGTYPE(:,NVT_EVER) &! equatorial forest 00213 + 0.95 *(PVEGTYPE(:,NVT_GRAS) + &! grassland 00214 PVEGTYPE(:,NVT_TROG) + &! trop. grass 00215 PVEGTYPE(:,NVT_PARK) ) &! irr. parks 00216 + 0. * PVEGTYPE(:,NVT_NO ) &! no vegetation (smooth) 00217 + 0. * PVEGTYPE(:,NVT_SNOW) &! no vegetation (snow) 00218 + 0. * PVEGTYPE(:,NVT_ROCK) ! no vegetation (rocks) 00219 IF (LHOOK) CALL DR_HOOK('MODI_VEG_FROM_LAI:VEG_FROM_LAI_1D',1,ZHOOK_HANDLE) 00220 ! 00221 !----------------------------------------------------------------- 00222 ! 00223 END FUNCTION VEG_FROM_LAI_1D 00224 ! 00225 ! #################################################### 00226 FUNCTION VEG_FROM_LAI_2D(PLAI,PVEGTYPE) RESULT(PVEG) 00227 ! #################################################### 00228 !! 00229 !! PURPOSE 00230 !! ------- 00231 ! 00232 ! Calculates coverage of soil by vegetation from leaf 00233 ! area index and type of vegetation 00234 ! (most of types; forest and vineyards; grassland) 00235 ! 00236 !!** METHOD 00237 !! ------ 00238 !! 00239 !! EXTERNAL 00240 !! -------- 00241 !! none 00242 !! 00243 !! IMPLICIT ARGUMENTS 00244 !! ------------------ 00245 !! 00246 !! none 00247 !! 00248 !! REFERENCE 00249 !! --------- 00250 !! 00251 !! 00252 !! AUTHOR 00253 !! ------ 00254 !! 00255 !! V. Masson and A. Boone * Meteo-France * 00256 !! 00257 !! MODIFICATIONS 00258 !! ------------- 00259 !! Original 25/03/99 00260 !! 00261 !------------------------------------------------------------------------------- 00262 ! 00263 !* 0. DECLARATIONS 00264 ! ------------ 00265 ! 00266 USE MODD_DATA_COVER_PAR, ONLY : NVT_NO, NVT_ROCK, NVT_SNOW, & 00267 NVT_C3, NVT_C4, NVT_IRR, & 00268 NVT_CONI, NVT_TREE, NVT_EVER, & 00269 NVT_TROG, NVT_PARK, NVT_GRAS 00270 USE MODD_SURF_PAR, ONLY : XUNDEF 00271 ! 00272 ! 00273 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00274 USE PARKIND1 ,ONLY : JPRB 00275 ! 00276 IMPLICIT NONE 00277 ! 00278 !* 0.1 declarations of arguments 00279 ! 00280 REAL, DIMENSION(:,:), INTENT(IN) :: PLAI ! Leaf area Index 00281 REAL, DIMENSION(:,:,:), INTENT(IN) :: PVEGTYPE ! type of vegetation 00282 ! 00283 REAL, DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2)) :: PVEG ! vegetation fraction 00284 ! 00285 !* 0.2 declarations of local variables 00286 ! 00287 REAL, DIMENSION(SIZE(PLAI,1),SIZE(PLAI,2)) :: ZLAI 00288 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00289 !----------------------------------------------------------------- 00290 IF (LHOOK) CALL DR_HOOK('MODI_VEG_FROM_LAI:VEG_FROM_LAI_2D',0,ZHOOK_HANDLE) 00291 ZLAI(:,:) = PLAI(:,:) 00292 WHERE ( PVEGTYPE(:,:,NVT_NO ) + PVEGTYPE(:,:,NVT_ROCK) + PVEGTYPE(:,:,NVT_SNOW) < 1.) 00293 ZLAI(:,:) = PLAI(:,:) / (1.-PVEGTYPE(:,:,NVT_NO)-PVEGTYPE(:,:,NVT_ROCK)-PVEGTYPE(:,:,NVT_SNOW)) 00294 END WHERE 00295 ! 00296 PVEG(:,:) = XUNDEF 00297 ! 00298 WHERE (PLAI(:,:) /= XUNDEF) 00299 PVEG(:,:) = (1. - EXP( -0.6 * ZLAI(:,:) ))*(PVEGTYPE(:,:,NVT_C4 ) + &! C4 crops 00300 PVEGTYPE(:,:,NVT_IRR ) + &! irrigated crops 00301 PVEGTYPE(:,:,NVT_C3 ) ) &! C3 crops 00302 + 0.95 *(PVEGTYPE(:,:,NVT_TREE) + &! broadleaf forest 00303 PVEGTYPE(:,:,NVT_CONI) ) &! coniferous forest 00304 + 0.99 * PVEGTYPE(:,:,NVT_EVER) &! equatorial forest 00305 + 0.95 *(PVEGTYPE(:,:,NVT_GRAS) + &! grassland 00306 PVEGTYPE(:,:,NVT_TROG) + &! tropical grass 00307 PVEGTYPE(:,:,NVT_PARK) ) &! irr. parks 00308 + 0. * PVEGTYPE(:,:,NVT_NO ) &! no vegetation (smooth) 00309 + 0. * PVEGTYPE(:,:,NVT_SNOW) &! no vegetation (snow) 00310 + 0. * PVEGTYPE(:,:,NVT_ROCK) ! no vegetation (rocks) 00311 END WHERE 00312 IF (LHOOK) CALL DR_HOOK('MODI_VEG_FROM_LAI:VEG_FROM_LAI_2D',1,ZHOOK_HANDLE) 00313 ! 00314 !----------------------------------------------------------------- 00315 ! 00316 END FUNCTION VEG_FROM_LAI_2D 00317 ! 00318 ! 00319 ! 00320 ! #################################################### 00321 FUNCTION VEG_FROM_LAI_PATCH_1D(PLAI,PVEGTYPE) RESULT(PVEG) 00322 ! #################################################### 00323 !! 00324 !! PURPOSE 00325 !! ------- 00326 ! 00327 ! Calculates coverage of soil by vegetation from leaf 00328 ! area index and type of vegetation for each vegetation patch 00329 ! (most of types; forest and vineyards; grassland) 00330 ! 00331 !!** METHOD 00332 !! ------ 00333 !! 00334 !! EXTERNAL 00335 !! -------- 00336 !! none 00337 !! 00338 !! IMPLICIT ARGUMENTS 00339 !! ------------------ 00340 !! 00341 !! none 00342 !! 00343 !! REFERENCE 00344 !! --------- 00345 !! 00346 !! 00347 !! AUTHOR 00348 !! ------ 00349 !! 00350 !! F.Solmon/V.Masson 00351 !! 00352 !! MODIFICATIONS 00353 !! ------------- 00354 !! Original 25/03/99 00355 !! 00356 !------------------------------------------------------------------------------- 00357 ! 00358 !* 0. DECLARATIONS 00359 ! ------------ 00360 ! 00361 USE MODD_DATA_COVER_PAR, ONLY : NVT_NO, NVT_ROCK, NVT_SNOW, & 00362 NVT_C3, NVT_C4, NVT_IRR, & 00363 NVT_CONI, NVT_TREE, NVT_EVER, & 00364 NVT_TROG, NVT_PARK, NVT_GRAS 00365 USE MODD_SURF_PAR, ONLY : XUNDEF 00366 ! 00367 ! 00368 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00369 USE PARKIND1 ,ONLY : JPRB 00370 ! 00371 IMPLICIT NONE 00372 ! 00373 !* 0.1 declarations of arguments 00374 ! 00375 REAL, DIMENSION(:), INTENT(IN) :: PLAI ! Leaf area Index 00376 REAL, DIMENSION(:), INTENT(IN) :: PVEGTYPE ! type of vegetation 00377 ! 00378 REAL, DIMENSION(SIZE(PLAI)) :: PVEG ! vegetation fraction 00379 ! 00380 !* 0.2 declarations of local variables 00381 ! 00382 REAL, DIMENSION(SIZE(PLAI)) :: ZLAI 00383 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00384 !----------------------------------------------------------------- 00385 IF (LHOOK) CALL DR_HOOK('MODI_VEG_FROM_LAI:VEG_FROM_LAI_PATCH_1D',0,ZHOOK_HANDLE) 00386 ZLAI(:) = PLAI(:) 00387 PVEG(:) = XUNDEF 00388 ! 00389 IF (PVEGTYPE(NVT_C4 )>0.) PVEG(NVT_C4 )= 1. - EXP( -0.6 * ZLAI(NVT_C4 ) ) 00390 IF (PVEGTYPE(NVT_IRR )>0.) PVEG(NVT_IRR )= 1. - EXP( -0.6 * ZLAI(NVT_IRR ) ) 00391 IF (PVEGTYPE(NVT_C3 )>0.) PVEG(NVT_C3 )= 1. - EXP( -0.6 * ZLAI(NVT_C3 ) ) 00392 ! 00393 IF (PVEGTYPE(NVT_TREE)>0.) PVEG(NVT_TREE)= 0.95 00394 IF (PVEGTYPE(NVT_CONI)>0.) PVEG(NVT_CONI)= 0.95 00395 IF (PVEGTYPE(NVT_EVER)>0.) PVEG(NVT_EVER)= 0.99 00396 ! 00397 IF (PVEGTYPE(NVT_GRAS)>0.) PVEG(NVT_GRAS)= 0.95 00398 IF (PVEGTYPE(NVT_TROG)>0.) PVEG(NVT_TROG)= 0.95 00399 IF (PVEGTYPE(NVT_PARK)>0.) PVEG(NVT_PARK)= 0.95 00400 ! 00401 IF (PVEGTYPE(NVT_NO )>0.) PVEG(NVT_NO )= 0. 00402 IF (PVEGTYPE(NVT_SNOW)>0.) PVEG(NVT_SNOW)= 0. 00403 IF (PVEGTYPE(NVT_ROCK)>0.) PVEG(NVT_ROCK)= 0. 00404 IF (LHOOK) CALL DR_HOOK('MODI_VEG_FROM_LAI:VEG_FROM_LAI_PATCH_1D',1,ZHOOK_HANDLE) 00405 00406 ! 00407 END FUNCTION VEG_FROM_LAI_PATCH_1D 00408 ! 00409 !-------------------------------------------- 00410 !