SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE ISBA_FLOOD_PROPERTIES(KNI,PTA,PEXNA,PRHOA,PTG,PEXNS,PQA,PVMOD, & 00003 PZREF,PUREF,PPS,PDIRCOSZW,PVEG,PLAI, & 00004 PFFLOOD,PFFROZEN,PZ0_FLOOD,PFFG_NOSNOW, & 00005 PFFV_NOSNOW) 00006 ! ############################################################################ 00007 ! 00008 ! 00009 !!**** *ISBA_FLOOD_PROPERTIES* 00010 !! 00011 !! PURPOSE 00012 !! ------- 00013 ! Calculate the Flood fractions, roughness length and albedo. 00014 ! 00015 !!** METHOD 00016 !! ------ 00017 ! 00018 !! EXTERNAL 00019 !! -------- 00020 !! 00021 !! IMPLICIT ARGUMENTS 00022 !! ------------------ 00023 !! 00024 !! 00025 !! REFERENCE 00026 !! --------- 00027 !! 00028 !! AUTHOR 00029 !! ------ 00030 !! B. Decharme * Meteo-France * 00031 !! 00032 !! MODIFICATIONS 00033 !! ------------- 00034 !! Original 25/05/08 00035 !! Modified 09/2009 B. Decharme: limitation of Ri in surface_ri.F90 00036 !------------------------------------------------------------------------------- 00037 ! 00038 !* 0. DECLARATIONS 00039 ! ------------ 00040 ! 00041 USE MODD_CSTS, ONLY : XTT, XG, XCPD 00042 USE MODD_SNOW_PAR, ONLY : XZ0SN, XZ0HSN 00043 USE MODD_WATER_PAR, ONLY : XALBSCA_WAT, XEMISWAT, XALBWATICE, XEMISWATICE 00044 ! 00045 USE MODI_SURFACE_RI 00046 USE MODI_SURFACE_CD 00047 USE MODI_SURFACE_CDCH_1DARP 00048 USE MODI_WIND_THRESHOLD 00049 ! 00050 USE MODE_SURF_FLOOD_FRAC 00051 USE MODE_THERMOS 00052 ! 00053 USE MODD_SURF_ATM, ONLY : LDRAG_COEF_ARP, XVCHRNK, XVZ0CM 00054 ! 00055 USE MODI_PACK_SAME_RANK 00056 USE MODI_UNPACK_SAME_RANK 00057 ! 00058 ! 00059 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00060 USE PARKIND1 ,ONLY : JPRB 00061 ! 00062 USE MODI_GET_1D_MASK 00063 ! 00064 IMPLICIT NONE 00065 ! 00066 !* 0.1 declarations of arguments 00067 ! 00068 INTEGER, INTENT(IN) :: KNI 00069 ! 00070 REAL, DIMENSION(:), INTENT(IN) :: PTA ! air temperature at atm. level 00071 REAL, DIMENSION(:), INTENT(IN) :: PQA ! air humidity at atm. level (kg/kg) 00072 REAL, DIMENSION(:), INTENT(IN) :: PEXNA ! Exner function at atm. level 00073 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density at atm. level 00074 REAL, DIMENSION(:), INTENT(IN) :: PVMOD ! module of wind at atm. wind level 00075 REAL, DIMENSION(:), INTENT(IN) :: PZREF ! atm. level for temp. and humidity 00076 REAL, DIMENSION(:), INTENT(IN) :: PUREF ! atm. level for wind 00077 REAL, DIMENSION(:), INTENT(IN) :: PTG ! Composite Temperature 00078 REAL, DIMENSION(:), INTENT(IN) :: PEXNS ! Exner function at sea surface 00079 REAL, DIMENSION(:), INTENT(IN) :: PPS ! air pressure at sea surface 00080 REAL, DIMENSION(:), INTENT(IN) :: PDIRCOSZW ! orography slope cosine 00081 REAL, DIMENSION(:), INTENT(IN) :: PVEG ! vegetation fraction 00082 REAL, DIMENSION(:), INTENT(IN) :: PLAI ! leaf area index 00083 REAL, DIMENSION(:), INTENT(IN) :: PFFLOOD 00084 REAL, DIMENSION(:), INTENT(IN) :: PFFROZEN 00085 ! 00086 REAL, DIMENSION(:), INTENT(INOUT) :: PZ0_FLOOD! roughness length over floodplains 00087 ! 00088 REAL, DIMENSION(:), INTENT(OUT) :: PFFG_NOSNOW 00089 REAL, DIMENSION(:), INTENT(OUT) :: PFFV_NOSNOW 00090 ! 00091 !* 0.2 declarations of local variables 00092 ! 00093 REAL, PARAMETER :: ZMISS = 0.0 00094 ! 00095 INTEGER, DIMENSION(KNI) :: IMASK ! mask to pack/unpack each variable 00096 ! 00097 REAL, DIMENSION(KNI) :: ZUSTAR2 ! square of friction velocity 00098 REAL, DIMENSION(KNI) :: ZAC ! Aerodynamical conductance 00099 REAL, DIMENSION(KNI) :: ZRA ! Aerodynamical resistance 00100 REAL, DIMENSION(KNI) :: ZZ0HF ! heat roughness length over floodplains 00101 REAL, DIMENSION(KNI) :: ZRI ! Richardson number 00102 REAL, DIMENSION(KNI) :: ZQSAT ! humidity at saturation 00103 REAL, DIMENSION(KNI) :: ZCD ! heat drag coefficient 00104 REAL, DIMENSION(KNI) :: ZCDN ! momentum drag coefficient 00105 REAL, DIMENSION(KNI) :: ZCH ! neutral momentum drag coefficient 00106 ! 00107 !* 0.3 declarations of local pack/unpack variables 00108 ! 00109 REAL, DIMENSION(KNI) :: ZZ0_FLOOD 00110 REAL, DIMENSION(KNI) :: ZFFG_NOSNOW 00111 REAL, DIMENSION(KNI) :: ZFFV_NOSNOW 00112 ! 00113 !* 0.4 declarations of local packing variables 00114 ! 00115 REAL, DIMENSION(KNI) :: ZPSNG 00116 REAL, DIMENSION(KNI) :: ZPSNV 00117 ! 00118 REAL, DIMENSION(KNI) :: ZFFLOOD 00119 REAL, DIMENSION(KNI) :: ZFFROZEN 00120 REAL, DIMENSION(KNI) :: ZVEG 00121 REAL, DIMENSION(KNI) :: ZLAI 00122 REAL, DIMENSION(KNI) :: ZVMOD ! wind modulus 00123 REAL, DIMENSION(KNI) :: ZTG 00124 REAL, DIMENSION(KNI) :: ZPS 00125 REAL, DIMENSION(KNI) :: ZEXNS 00126 REAL, DIMENSION(KNI) :: ZEXNA 00127 REAL, DIMENSION(KNI) :: ZTA 00128 REAL, DIMENSION(KNI) :: ZQA 00129 REAL, DIMENSION(KNI) :: ZZREF 00130 REAL, DIMENSION(KNI) :: ZUREF 00131 REAL, DIMENSION(KNI) :: ZDIRCOSZW 00132 ! 00133 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00134 ! 00135 !------------------------------------------------------------------------------- 00136 ! 00137 ! 0. Initializations 00138 ! --------------- 00139 ! 00140 IF (LHOOK) CALL DR_HOOK('ISBA_FLOOD_PROPERTIES',0,ZHOOK_HANDLE) 00141 ! 00142 CALL GET_1D_MASK(KNI,SIZE(PFFLOOD(:)),PFFLOOD(:),IMASK(:)) 00143 ! 00144 CALL PACK_SAME_RANK(IMASK(:),PZ0_FLOOD(:),ZZ0_FLOOD(:)) 00145 CALL PACK_SAME_RANK(IMASK(:),PFFLOOD (:),ZFFLOOD (:)) 00146 CALL PACK_SAME_RANK(IMASK(:),PFFROZEN (:),ZFFROZEN (:)) 00147 CALL PACK_SAME_RANK(IMASK(:),PVEG (:),ZVEG (:)) 00148 CALL PACK_SAME_RANK(IMASK(:),PLAI (:),ZLAI (:)) 00149 CALL PACK_SAME_RANK(IMASK(:),PVMOD (:),ZVMOD (:)) 00150 CALL PACK_SAME_RANK(IMASK(:),PTG (:),ZTG (:)) 00151 CALL PACK_SAME_RANK(IMASK(:),PPS (:),ZPS (:)) 00152 CALL PACK_SAME_RANK(IMASK(:),PEXNS (:),ZEXNS (:)) 00153 CALL PACK_SAME_RANK(IMASK(:),PEXNA (:),ZEXNA (:)) 00154 CALL PACK_SAME_RANK(IMASK(:),PTA (:),ZTA (:)) 00155 CALL PACK_SAME_RANK(IMASK(:),PQA (:),ZQA (:)) 00156 CALL PACK_SAME_RANK(IMASK(:),PZREF (:),ZZREF (:)) 00157 CALL PACK_SAME_RANK(IMASK(:),PUREF (:),ZUREF (:)) 00158 CALL PACK_SAME_RANK(IMASK(:),PDIRCOSZW(:),ZDIRCOSZW(:)) 00159 ! 00160 !------------------------------------------------------------------------------- 00161 ! 00162 ! 1. Flood fractions without snow 00163 ! ---------------------------- 00164 ! 00165 ZPSNG(:)=0.0 00166 ZPSNV(:)=0.0 00167 ZFFG_NOSNOW(:) = FLOOD_FRAC_GROUND(ZPSNG,ZFFLOOD) 00168 ZFFV_NOSNOW(:) = FLOOD_FRAC_VEG(ZLAI,ZPSNV,ZFFLOOD) 00169 ! 00170 !------------------------------------------------------------------------------- 00171 ! 00172 ! 2. roughness length 00173 ! ---------------- 00174 ! 00175 ! * Richardson number (and possible limitation) 00176 ! 00177 CALL SURFACE_RI(ZTG,ZQSAT,ZEXNS,ZEXNA,ZTA,ZQA, & 00178 ZZREF,ZUREF,ZDIRCOSZW,ZVMOD,ZRI) 00179 ! 00180 ! * Wind threshold 00181 ! 00182 ZVMOD(:)=WIND_THRESHOLD(ZVMOD(:),ZUREF(:)) 00183 ! 00184 ! * Saturated specified humidity near the water surface 00185 ! 00186 ZQSAT(:) = QSAT(ZTG(:),ZPS(:)) 00187 ! 00188 ! * Detection of flood ice 00189 ! 00190 WHERE(ZFFROZEN(:)==0.0) 00191 ZZ0HF(:) = ZZ0_FLOOD(:) 00192 ELSEWHERE 00193 ZZ0HF(:) = XZ0HSN 00194 END WHERE 00195 ! 00196 ! * Drag coefficient 00197 ! 00198 IF (LDRAG_COEF_ARP) THEN 00199 00200 CALL SURFACE_CDCH_1DARP(ZZREF, ZZ0_FLOOD, ZZ0HF, ZVMOD, ZTA, ZTG, & 00201 ZQA, ZQSAT, ZCD, ZCDN, ZCH ) 00202 ! 00203 ! * Calculate the roughness length over floodplains according to Charnock's expression. 00204 ! 00205 ZUSTAR2(:) = ZCD(:)*ZVMOD(:)*ZVMOD(:) 00206 WHERE(ZFFROZEN(:)==0.0) 00207 ZZ0_FLOOD(:) = XVCHRNK * ZUSTAR2(:) / XG + XVZ0CM * ZCD(:) / ZCDN(:) 00208 ELSEWHERE 00209 ZZ0_FLOOD(:) = XZ0SN 00210 END WHERE 00211 00212 ELSE 00213 ! 00214 CALL SURFACE_CD(ZRI, ZZREF, ZUREF, ZZ0_FLOOD, ZZ0HF, ZCD, ZCDN) 00215 ! 00216 ! * Calculate the roughness length over floodplains according to Charnock's expression. 00217 ! 00218 ZUSTAR2(:) = ZCD(:)*ZVMOD(:)*ZVMOD(:) 00219 ! 00220 WHERE(ZFFROZEN(:)==0.0) 00221 ZZ0_FLOOD(:) = XVCHRNK * ZUSTAR2(:) / XG + XVZ0CM * ZCD(:) / ZCDN(:) 00222 ELSEWHERE 00223 ZZ0_FLOOD(:) = XZ0SN 00224 END WHERE 00225 ! 00226 ENDIF 00227 ! 00228 CALL UNPACK_SAME_RANK(IMASK(:),ZZ0_FLOOD(:),PZ0_FLOOD(:),XZ0SN) 00229 ! 00230 CALL UNPACK_SAME_RANK(IMASK(:),ZFFG_NOSNOW(:),PFFG_NOSNOW(:),ZMISS) 00231 CALL UNPACK_SAME_RANK(IMASK(:),ZFFV_NOSNOW(:),PFFV_NOSNOW(:),ZMISS) 00232 ! 00233 IF (LHOOK) CALL DR_HOOK('ISBA_FLOOD_PROPERTIES',1,ZHOOK_HANDLE) 00234 !------------------------------------------------------------------------------- 00235 ! 00236 END SUBROUTINE ISBA_FLOOD_PROPERTIES