SURFEX v7.3
General documentation of Surfex
|
00001 ! ########### 00002 MODULE MODI_SOIL_ALBEDO 00003 ! ########### 00004 ! 00005 INTERFACE SOIL_ALBEDO 00006 ! 00007 ! 00008 SUBROUTINE SOIL_ALBEDO_1D(HALBEDO, & 00009 PWSAT,PWG1, & 00010 PALBVIS_DRY,PALBNIR_DRY,PALBUV_DRY, & 00011 PALBVIS_WET,PALBNIR_WET,PALBUV_WET, & 00012 PALBVIS_SOIL, PALBNIR_SOIL,PALBUV_SOIL ) 00013 ! 00014 ! 00015 !* 0.1 declarations of arguments 00016 ! ------------------------- 00017 ! 00018 CHARACTER(LEN=*), INTENT(IN) :: HALBEDO 00019 ! SOIL_ALBEDO dependance wxith surface soil water content 00020 ! "EVOL" = SOIL_ALBEDO evolves with soil wetness 00021 ! "DRY " = constant SOIL_ALBEDO value for dry soil 00022 ! "WET " = constant SOIL_ALBEDO value for wet soil 00023 ! "MEAN" = constant SOIL_ALBEDO value for medium soil wetness 00024 ! 00025 REAL, DIMENSION(:), INTENT(IN) :: PWSAT ! saturation water content 00026 REAL, DIMENSION(:), INTENT(IN) :: PWG1 ! surface water content 00027 REAL, DIMENSION(:), INTENT(IN) :: PALBVIS_DRY ! visible, near infra-red and UV 00028 REAL, DIMENSION(:), INTENT(IN) :: PALBNIR_DRY ! dry soil albedo 00029 REAL, DIMENSION(:), INTENT(IN) :: PALBUV_DRY ! 00030 REAL, DIMENSION(:), INTENT(IN) :: PALBVIS_WET ! visible, near infra-red and UV 00031 REAL, DIMENSION(:), INTENT(IN) :: PALBNIR_WET ! wet soil albedo 00032 REAL, DIMENSION(:), INTENT(IN) :: PALBUV_WET ! wet soil albedo 00033 ! 00034 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PALBVIS_SOIL! visible, near infra-red and UV 00035 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PALBNIR_SOIL! soil albedo 00036 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PALBUV_SOIL ! 00037 ! 00038 END SUBROUTINE SOIL_ALBEDO_1D 00039 ! 00040 SUBROUTINE SOIL_ALBEDO_1D_PATCH(HALBEDO, & 00041 PWSAT,PWG1, & 00042 PALBVIS_DRY,PALBNIR_DRY,PALBUV_DRY, & 00043 PALBVIS_WET,PALBNIR_WET,PALBUV_WET, & 00044 PALBVIS_SOIL, PALBNIR_SOIL,PALBUV_SOIL ) 00045 ! 00046 ! 00047 !* 0.1 declarations of arguments 00048 ! ------------------------- 00049 ! 00050 ! 00051 CHARACTER(LEN=*), INTENT(IN) :: HALBEDO 00052 ! SOIL_ALBEDO dependance wxith surface soil water content 00053 ! "EVOL" = SOIL_ALBEDO evolves with soil wetness 00054 ! "DRY " = constant SOIL_ALBEDO value for dry soil 00055 ! "WET " = constant SOIL_ALBEDO value for wet soil 00056 ! "MEAN" = constant SOIL_ALBEDO value for medium soil wetness 00057 ! 00058 REAL, DIMENSION(:), INTENT(IN) :: PWSAT ! saturation water content 00059 REAL, DIMENSION(:,:), INTENT(IN) :: PWG1 ! surface water content 00060 REAL, DIMENSION(:), INTENT(IN) :: PALBVIS_DRY ! visible, near infra-red and UV 00061 REAL, DIMENSION(:), INTENT(IN) :: PALBNIR_DRY ! dry soil albedo 00062 REAL, DIMENSION(:), INTENT(IN) :: PALBUV_DRY ! 00063 REAL, DIMENSION(:), INTENT(IN) :: PALBVIS_WET ! visible, near infra-red and UV 00064 REAL, DIMENSION(:), INTENT(IN) :: PALBNIR_WET ! wet soil albedo 00065 REAL, DIMENSION(:), INTENT(IN) :: PALBUV_WET ! 00066 ! 00067 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PALBVIS_SOIL! visible, near infra-red and UV 00068 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PALBNIR_SOIL! soil albedo 00069 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PALBUV_SOIL ! 00070 ! 00071 END SUBROUTINE SOIL_ALBEDO_1D_PATCH 00072 ! 00073 END INTERFACE 00074 ! 00075 END MODULE MODI_SOIL_ALBEDO 00076 ! 00077 ! #################################################################### 00078 SUBROUTINE SOIL_ALBEDO_1D(HALBEDO, & 00079 PWSAT,PWG1, & 00080 PALBVIS_DRY,PALBNIR_DRY,PALBUV_DRY, & 00081 PALBVIS_WET,PALBNIR_WET,PALBUV_WET, & 00082 PALBVIS_SOIL, PALBNIR_SOIL,PALBUV_SOIL ) 00083 ! #################################################################### 00084 ! 00085 !!**** *SOIL_ALBEDO* 00086 !! 00087 !! PURPOSE 00088 !! ------- 00089 ! computes the SOIL ALBEDO of the natural continental parts. 00090 ! 00091 ! Soil SOIL_ALBEDO is estimated from sand fraction. 00092 ! A correction due to the soil humidity can be used. 00093 ! 00094 ! 00095 !!** METHOD 00096 !! ------ 00097 ! 00098 !! EXTERNAL 00099 !! -------- 00100 !! 00101 !! IMPLICIT ARGUMENTS 00102 !! ------------------ 00103 !! 00104 !! 00105 !! REFERENCE 00106 !! --------- 00107 !! 00108 !! 00109 !! AUTHOR 00110 !! ------ 00111 !! V. Masson * Meteo-France * 00112 !! 00113 !! MODIFICATIONS 00114 !! ------------- 00115 !! Original 17/12/99 00116 !------------------------------------------------------------------------------- 00117 ! 00118 !* 0. DECLARATIONS 00119 ! ------------ 00120 ! 00121 ! 00122 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00123 USE PARKIND1 ,ONLY : JPRB 00124 ! 00125 IMPLICIT NONE 00126 ! 00127 !* 0.1 declarations of arguments 00128 ! ------------------------- 00129 ! 00130 CHARACTER(LEN=*), INTENT(IN) :: HALBEDO 00131 ! SOIL_ALBEDO dependance wxith surface soil water content 00132 ! "EVOL" = SOIL_ALBEDO evolves with soil wetness 00133 ! "DRY " = constant SOIL_ALBEDO value for dry soil 00134 ! "WET " = constant SOIL_ALBEDO value for wet soil 00135 ! "MEAN" = constant SOIL_ALBEDO value for medium soil wetness 00136 ! 00137 REAL, DIMENSION(:), INTENT(IN) :: PWSAT ! saturation water content 00138 REAL, DIMENSION(:), INTENT(IN) :: PWG1 ! surface water content 00139 REAL, DIMENSION(:), INTENT(IN) :: PALBVIS_DRY ! visible, near infra-red and UV 00140 REAL, DIMENSION(:), INTENT(IN) :: PALBNIR_DRY ! dry soil albedo 00141 REAL, DIMENSION(:), INTENT(IN) :: PALBUV_DRY ! 00142 REAL, DIMENSION(:), INTENT(IN) :: PALBVIS_WET ! visible, near infra-red and UV 00143 REAL, DIMENSION(:), INTENT(IN) :: PALBNIR_WET ! wet soil albedo 00144 REAL, DIMENSION(:), INTENT(IN) :: PALBUV_WET ! 00145 ! 00146 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PALBVIS_SOIL! visible, near infra-red and UV 00147 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PALBNIR_SOIL! soil albedo 00148 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PALBUV_SOIL ! 00149 ! 00150 !* 0.2 declarations of local variables 00151 ! ------------------------------- 00152 ! 00153 REAL, DIMENSION(SIZE(PWSAT)) :: ZX 00154 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00155 ! 00156 !------------------------------------------------------------------------------- 00157 ! 00158 IF (LHOOK) CALL DR_HOOK('MODI_SOIL_ALBEDO:SOIL_ALBEDO_1D',0,ZHOOK_HANDLE) 00159 IF (HALBEDO=='USER' .AND. LHOOK) CALL DR_HOOK('MODI_SOIL_ALBEDO:SOIL_ALBEDO_1D',1,ZHOOK_HANDLE) 00160 IF (HALBEDO=='USER') RETURN 00161 ! 00162 SELECT CASE ( HALBEDO ) 00163 CASE ('EVOL') 00164 ! 00165 ZX = MIN( PWG1(:)/PWSAT(:) , 1. ) 00166 ! 00167 !* linear formula 00168 ! ZALBVIS_SOIL(:) = PALBVIS_DRY(:) + ZX(:)*(PALBVIS_WET(:)-PALBVIS_DRY(:)) 00169 ! ZALBNIR_SOIL(:) = PALBNIR_DRY(:) + ZX(:)*(PALBNIR_WET(:)-PALBNIR_DRY(:)) 00170 ! ZALBUV_SOIL (:) = PALBUV_DRY (:) + ZX(:)*(PALBUV_WET (:)-PALBUV_DRY (:)) 00171 !* quadratic formula 00172 IF (PRESENT(PALBVIS_SOIL)) & 00173 PALBVIS_SOIL(:) = PALBVIS_WET(:) & 00174 + (0.25*PALBVIS_DRY(:)-PALBVIS_WET(:)) & 00175 * (1. - ZX(:)) & 00176 * ( ZX(:) + ( PALBVIS_DRY(:)-PALBVIS_WET(:)) & 00177 /(0.25*PALBVIS_DRY(:)-PALBVIS_WET(:)) ) 00178 IF (PRESENT(PALBNIR_SOIL)) & 00179 PALBNIR_SOIL(:) = PALBNIR_WET(:) & 00180 + (0.25*PALBNIR_DRY(:)-PALBNIR_WET(:)) & 00181 * (1. - ZX(:)) & 00182 * ( ZX(:) + ( PALBNIR_DRY(:)-PALBNIR_WET(:)) & 00183 /(0.25*PALBNIR_DRY(:)-PALBNIR_WET(:)) ) 00184 IF (PRESENT(PALBUV_SOIL)) & 00185 PALBUV_SOIL (:) = PALBUV_WET(:) & 00186 + (0.25*PALBUV_DRY (:)-PALBUV_WET (:)) & 00187 * (1. - ZX(:)) & 00188 * ( ZX(:) + ( PALBUV_DRY (:)-PALBUV_WET (:)) & 00189 /(0.25*PALBUV_DRY (:)-PALBUV_WET (:)) ) 00190 ! 00191 CASE ('DRY ') 00192 IF (PRESENT(PALBVIS_SOIL)) PALBVIS_SOIL(:) = PALBVIS_DRY(:) 00193 IF (PRESENT(PALBNIR_SOIL)) PALBNIR_SOIL(:) = PALBNIR_DRY(:) 00194 IF (PRESENT(PALBUV_SOIL)) PALBUV_SOIL (:) = PALBUV_DRY (:) 00195 CASE ('WET ') 00196 IF (PRESENT(PALBVIS_SOIL)) PALBVIS_SOIL(:) = PALBVIS_WET(:) 00197 IF (PRESENT(PALBNIR_SOIL)) PALBNIR_SOIL(:) = PALBNIR_WET(:) 00198 IF (PRESENT(PALBUV_SOIL)) PALBUV_SOIL (:) = PALBUV_WET (:) 00199 CASE ('MEAN') 00200 IF (PRESENT(PALBVIS_SOIL)) PALBVIS_SOIL(:) = 0.5 * ( PALBVIS_DRY(:) + PALBVIS_WET(:) ) 00201 IF (PRESENT(PALBNIR_SOIL)) PALBNIR_SOIL(:) = 0.5 * ( PALBNIR_DRY(:) + PALBNIR_WET(:) ) 00202 IF (PRESENT(PALBUV_SOIL)) PALBUV_SOIL (:) = 0.5 * ( PALBUV_DRY (:) + PALBUV_WET (:) ) 00203 END SELECT 00204 IF (LHOOK) CALL DR_HOOK('MODI_SOIL_ALBEDO:SOIL_ALBEDO_1D',1,ZHOOK_HANDLE) 00205 ! 00206 !------------------------------------------------------------------------------- 00207 ! 00208 END SUBROUTINE SOIL_ALBEDO_1D 00209 ! 00210 !------------------------------------------------------------------------------- 00211 ! 00212 ! #################################################################### 00213 SUBROUTINE SOIL_ALBEDO_1D_PATCH(HALBEDO, & 00214 PWSAT,PWG1, & 00215 PALBVIS_DRY,PALBNIR_DRY,PALBUV_DRY, & 00216 PALBVIS_WET,PALBNIR_WET,PALBUV_WET, & 00217 PALBVIS_SOIL, PALBNIR_SOIL,PALBUV_SOIL ) 00218 ! #################################################################### 00219 ! 00220 !!**** *SOIL_ALBEDO* 00221 !! 00222 !! PURPOSE 00223 !! ------- 00224 ! computes the SOIL_ALBEDO of for different types (patches) 00225 ! of natural continental parts. 00226 ! 00227 ! Soil SOIL_ALBEDO is estimated from sand fraction. 00228 ! A correction due to the soil humidity can be used. 00229 ! 00230 ! 00231 !!** METHOD 00232 !! ------ 00233 ! 00234 !! EXTERNAL 00235 !! -------- 00236 !! 00237 !! IMPLICIT ARGUMENTS 00238 !! ------------------ 00239 !! 00240 !! 00241 !! REFERENCE 00242 !! --------- 00243 !! 00244 !! 00245 !! AUTHOR 00246 !! ------ 00247 !! F.Solmon / V. Masson 00248 !! 00249 !! MODIFICATIONS 00250 !! ------------- 00251 !! Original 00252 !------------------------------------------------------------------------------- 00253 ! 00254 !* 0. DECLARATIONS 00255 ! ------------ 00256 ! 00257 USE MODD_SURF_PAR, ONLY : XUNDEF 00258 ! 00259 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00260 USE PARKIND1 ,ONLY : JPRB 00261 ! 00262 IMPLICIT NONE 00263 ! 00264 !* 0.1 declarations of arguments 00265 ! ------------------------- 00266 ! 00267 CHARACTER(LEN=*), INTENT(IN) :: HALBEDO 00268 ! SOIL_ALBEDO dependance wxith surface soil water content 00269 ! "EVOL" = SOIL_ALBEDO evolves with soil wetness 00270 ! "DRY " = constant SOIL_ALBEDO value for dry soil 00271 ! "WET " = constant SOIL_ALBEDO value for wet soil 00272 ! "MEAN" = constant SOIL_ALBEDO value for medium soil wetness 00273 ! 00274 REAL, DIMENSION(:), INTENT(IN) :: PWSAT ! saturation water content 00275 REAL, DIMENSION(:,:), INTENT(IN) :: PWG1 ! surface water content 00276 REAL, DIMENSION(:), INTENT(IN) :: PALBVIS_DRY ! visible, near infra-red and UV 00277 REAL, DIMENSION(:), INTENT(IN) :: PALBNIR_DRY ! dry soil albedo 00278 REAL, DIMENSION(:), INTENT(IN) :: PALBUV_DRY ! 00279 REAL, DIMENSION(:), INTENT(IN) :: PALBVIS_WET ! visible, near infra-red and UV 00280 REAL, DIMENSION(:), INTENT(IN) :: PALBNIR_WET ! wet soil SOIL_ALBEDO 00281 REAL, DIMENSION(:), INTENT(IN) :: PALBUV_WET ! 00282 ! 00283 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PALBVIS_SOIL! visible, near infra-red and UV 00284 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PALBNIR_SOIL! soil albedo 00285 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PALBUV_SOIL ! 00286 ! 00287 !* 0.2 declarations of local variables 00288 ! ------------------------------- 00289 ! 00290 REAL, DIMENSION(SIZE(PWSAT)) :: ZX 00291 ! 00292 INTEGER :: IPATCH ! number of patches 00293 INTEGER :: JPATCH !loop index for patches 00294 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00295 !------------------------------------------------------------------------------- 00296 ! 00297 IF (LHOOK) CALL DR_HOOK('MODI_SOIL_ALBEDO:SOIL_ALBEDO_1D_PATCH',0,ZHOOK_HANDLE) 00298 IF (HALBEDO=='USER' .AND. LHOOK) CALL DR_HOOK('MODI_SOIL_ALBEDO:SOIL_ALBEDO_1D_PATCH',1,ZHOOK_HANDLE) 00299 IF (HALBEDO=='USER') RETURN 00300 ! 00301 IPATCH = SIZE(PWG1,2) 00302 00303 IF (PRESENT(PALBVIS_SOIL)) PALBVIS_SOIL = XUNDEF 00304 IF (PRESENT(PALBNIR_SOIL)) PALBNIR_SOIL = XUNDEF 00305 IF (PRESENT(PALBUV_SOIL)) PALBUV_SOIL = XUNDEF 00306 ! 00307 SELECT CASE ( HALBEDO ) 00308 CASE ('EVOL') 00309 00310 DO JPATCH=1,IPATCH 00311 ZX = MIN( PWG1(:,JPATCH)/PWSAT(:) , 1. ) 00312 00313 !WHERE (PWG1(:,JPATCH)/=XUNDEF) 00314 !* linear formula 00315 ! ZALBVIS_SOIL(:) = PALBVIS_DRY(:) + ZX(:)*(PALBVIS_WET(:)-PALBVIS_DRY(:)) 00316 ! ZALBNIR_SOIL(:) = PALBNIR_DRY(:) + ZX(:)*(PALBNIR_WET(:)-PALBNIR_DRY(:)) 00317 ! ZALBUV_SOIL (:) = PALBUV_DRY (:) + ZX(:)*(PALBUV_WET (:)-PALBUV_DRY (:)) 00318 !* quadratic formula 00319 IF (PRESENT(PALBVIS_SOIL)) & 00320 WHERE (PWG1(:,JPATCH)/=XUNDEF) & 00321 PALBVIS_SOIL(:,JPATCH) = PALBVIS_WET(:) & 00322 + (0.25*PALBVIS_DRY(:)-PALBVIS_WET(:)) & 00323 * (1. - ZX(:)) & 00324 * ( ZX(:) + ( PALBVIS_DRY(:)-PALBVIS_WET(:)) & 00325 /(0.25*PALBVIS_DRY(:)-PALBVIS_WET(:)) ) 00326 IF (PRESENT(PALBNIR_SOIL)) & 00327 WHERE (PWG1(:,JPATCH)/=XUNDEF) & 00328 PALBNIR_SOIL(:,JPATCH) = PALBNIR_WET(:) & 00329 + (0.25*PALBNIR_DRY(:)-PALBNIR_WET(:)) & 00330 * (1. - ZX(:)) & 00331 * ( ZX(:) + ( PALBNIR_DRY(:)-PALBNIR_WET(:)) & 00332 /(0.25*PALBNIR_DRY(:)-PALBNIR_WET(:)) ) 00333 IF (PRESENT(PALBUV_SOIL)) & 00334 WHERE (PWG1(:,JPATCH)/=XUNDEF) & 00335 PALBUV_SOIL (:,JPATCH) = PALBUV_WET (:) & 00336 + (0.25*PALBUV_DRY (:)-PALBUV_WET (:)) & 00337 * (1. - ZX(:)) & 00338 * ( ZX(:) + ( PALBUV_DRY (:)-PALBUV_WET (:)) & 00339 /(0.25*PALBUV_DRY (:)-PALBUV_WET (:)) ) 00340 00341 !END WHERE 00342 END DO 00343 00344 CASE ('DRY ') 00345 IF (PRESENT(PALBVIS_SOIL)) PALBVIS_SOIL(:,:) = SPREAD(PALBVIS_DRY(:),2,IPATCH) 00346 IF (PRESENT(PALBNIR_SOIL)) PALBNIR_SOIL(:,:) = SPREAD(PALBNIR_DRY(:),2,IPATCH) 00347 IF (PRESENT(PALBUV_SOIL)) PALBUV_SOIL (:,:) = SPREAD(PALBUV_DRY (:),2,IPATCH) 00348 00349 CASE ('WET ') 00350 IF (PRESENT(PALBVIS_SOIL)) PALBVIS_SOIL(:,:) = SPREAD(PALBVIS_WET(:),2,IPATCH) 00351 IF (PRESENT(PALBNIR_SOIL)) PALBNIR_SOIL(:,:) = SPREAD(PALBNIR_WET(:),2,IPATCH) 00352 IF (PRESENT(PALBUV_SOIL)) PALBUV_SOIL (:,:) = SPREAD(PALBUV_WET (:),2,IPATCH) 00353 00354 CASE ('MEAN') 00355 IF (PRESENT(PALBVIS_SOIL)) PALBVIS_SOIL(:,:) = 0.5 * ( SPREAD(PALBVIS_DRY(:),2,IPATCH) + SPREAD(PALBVIS_WET(:),2,IPATCH) ) 00356 IF (PRESENT(PALBNIR_SOIL)) PALBNIR_SOIL(:,:) = 0.5 * ( SPREAD(PALBNIR_DRY(:),2,IPATCH) + SPREAD(PALBNIR_WET(:),2,IPATCH) ) 00357 IF (PRESENT(PALBUV_SOIL)) PALBUV_SOIL (:,:) = 0.5 * ( SPREAD(PALBUV_DRY (:),2,IPATCH) + SPREAD(PALBUV_WET (:),2,IPATCH) ) 00358 00359 END SELECT 00360 IF (LHOOK) CALL DR_HOOK('MODI_SOIL_ALBEDO:SOIL_ALBEDO_1D_PATCH',1,ZHOOK_HANDLE) 00361 ! 00362 !------------------------------------------------------------------------------- 00363 ! 00364 END SUBROUTINE SOIL_ALBEDO_1D_PATCH