|
SURFEX v7.3
General documentation of Surfex
|
00001 SUBROUTINE DUSTFLUX_GET( & 00002 PUSTAR, & 00003 PRHOA, & 00004 PWG, & 00005 PZ0, & 00006 PWSAT, & 00007 PCLAY, & 00008 PSAND, & 00009 PWIND10M, & 00010 PSFDST, & 00011 KSIZE & 00012 ) 00013 ! 00014 !PURPOSE: 00015 !Take input from ISBA land surface model and 00016 !calculate a dust flux which is consistent with the input. 00017 00018 !THEORY: 00019 !Based on Marticorena/Bergametti, 1995 and Zender et al 2003 (JGR) 00020 00021 !CODE HISTORY 00022 !Code is a modified version of dstmbl.F90 in the DEAD model 00023 !Original version was downloaded from the DEAD homepage 00024 !http://dust.ess.uci.edu/dead/ on January 10th 2005 00025 00026 !AUTHOR (or rather "code modifyer") 00027 !Alf Grini <alf.grini@cnrm.meteo.fr> 00028 ! 00029 USE MODD_DST_SURF, ONLY : XFLX_MSS_FDG_FCT 00030 USE MODD_DSTMBL, ONLY : XRGH_MMN_SMT, XCST_SLT, XDMT_SLT_OPT 00031 USE MODE_DSTMBLUTL !Dust mobilization subroutines 00032 ! 00033 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00034 USE PARKIND1 ,ONLY : JPRB 00035 ! 00036 IMPLICIT NONE 00037 ! 00038 !INPUT, set their dimensions to their passed lengths or to KSIZE ? 00039 INTEGER, INTENT(IN) :: KSIZE ![nbr] length of passed arrays 00040 REAL, INTENT(IN), DIMENSION(KSIZE) :: PUSTAR ![m/s] wind friction speed 00041 REAL, INTENT(IN), DIMENSION(KSIZE) :: PRHOA ![kg/m3] air density at 2m height 00042 REAL, INTENT(IN), DIMENSION(KSIZE) :: PCLAY ![frc] mass fraction clay 00043 REAL, INTENT(IN), DIMENSION(KSIZE) :: PSAND ![frc] mass fraction sand 00044 REAL, INTENT(IN), DIMENSION(KSIZE) :: PWG ![m3 m-3] volumetric water fraction 00045 REAL, INTENT(IN), DIMENSION(KSIZE) :: PWSAT ![m3 m-3] saturation water content 00046 REAL, INTENT(IN), DIMENSION(KSIZE) :: PZ0 ![m] surface roughness length 00047 REAL, INTENT(IN), DIMENSION(KSIZE) :: PWIND10M ![m/s] wind at 10m altitude 00048 !OUTPUT the flux of dust 00049 REAL, INTENT(OUT), DIMENSION(KSIZE) :: PSFDST ! [kg m-2 s-1] Output flux of atmospheric dust 00050 00051 !!!!!!!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&!!!!!! 00052 00053 !#ifdef AlG01 00054 !REAL,PARAMETER::XFLX_MSS_FDG_FCT=28. ! [frc] Global mass flux tuning factor (a posteriori) 00055 !#else 00056 !REAL,PARAMETER::XFLX_MSS_FDG_FCT=7.0e-4 ! [frc] Global mass flux tuning factor (a posteriori) 00057 !REAL,PARAMETER::XFLX_MSS_FDG_FCT=21.0e-4 ! [frc] Global mass flux tuning factor (a posteriori) 00058 !real,PARAMETER::XFLX_MSS_FDG_FCT=12.0e-4 ! [frc] values used in Masdev47 00059 !REAL,PARAMETER::flx_mss_fdg_fctm=4.0e-4 ! [frc] Global mass flux tuning factor (a posteriori) (proposez by Pierre) 00060 ! 00061 !Define local variables: 00062 LOGICAL, DIMENSION(KSIZE) :: GFLG_MBL ! [frc] Mobilization candidate flag 00063 REAL, DIMENSION(KSIZE) :: ZMBL_BSN_FCT ! [frc] enhancement factor for grid cells with higher erodibility 00064 !REAL, DIMENSION(KSIZE) :: ZWND_RFR ! [m s-1] wind speed at reference level 00065 REAL, DIMENSION(KSIZE) :: ZWND_FRC_THR_SLT ! [m/s] Threshold wind friction speed when all effects taken into account 00066 REAL, DIMENSION(KSIZE) :: ZGWC_SFC ! [kg/kg] Gravimetric water content 00067 REAL, DIMENSION(KSIZE) :: ZGWC_THR ! [kg kg-1] Threshold gravimetric water content 00068 REAL, DIMENSION(KSIZE) :: ZFRC_THR_NCR_WTR ! [frc] Fraction by which soil wetness increases threshold wind 00069 REAL, DIMENSION(KSIZE) :: ZFRC_THR_NCR_DRG ! [frc] fraction by which drag partitioning increases threshold wind 00070 REAL, DIMENSION(KSIZE) :: ZWND_FRC_SLT ! [m/s] wind friction speed after modified for saltation feedbacks 00071 !REAL, DIMENSION(KSIZE) :: ZWND_RFR_THR_SLT ! [m s-1] Threshold wind speed at reference level 00072 REAL, DIMENSION(KSIZE) :: ZCOEF 00073 REAL, DIMENSION(KSIZE) :: ZFLX_MSS_HRZ_SLT_TTL_WBN ! [kg m-1 s-1] Vertically integrated horizontal saltation soil flux for a wind bin 00074 REAL, DIMENSION(KSIZE) :: ZFLX_MSS_VRT_DST_TTL_WBN ! [kg m-2 s-1] 00075 REAL, DIMENSION(KSIZE) :: ZDST_SLT_FLX_RAT_TTL ! [m-1] ratio of vertical to horizontal flux (alpha in several papers) 00076 ! 00077 real :: ZCLAY(KSIZE) 00078 INTEGER :: I !Counter for number of points (used in loops) 00079 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00080 00081 !Allocate the local variables 00082 IF (LHOOK) CALL DR_HOOK('DUSTFLUX_GET',0,ZHOOK_HANDLE) 00083 ! 00084 ZCLAY(:)=0.2 00085 !Initialize mobilization candidate flag 00086 GFLG_MBL(:) = .TRUE. 00087 !fxm: Get erodibility limitation factor, use something connected to amount of sand 00088 !Discuss with Valery Masson 00089 ZMBL_BSN_FCT(:) = PSAND(:) 00090 ! utilisé dans le calcul de l'effet Owen 00091 !ZWND_RFR(:) = PWIND10M(:) 00092 ! 00093 !Initialize vertical dust flux 00094 ZFLX_MSS_VRT_DST_TTL_WBN(:) = 0.d0 00095 ! 00096 ! Old Alf Grini code: bug on DEAD detected ? 00097 ! Modification proposed by M. Mokhtari.. Accepted for all cases 00098 ! if (CVERMOD=='CMDVER') then 00099 ZGWC_THR(:) = MIN(0.14,MAX(0.02,3. * PCLAY(:) * (0.17 + 0.14 * PCLAY(:)))) 00100 !ZGWC_THR(:) = PCLAY(:) * (0.17d0 + 0.14d0 * PCLAY(:)) 00101 ! else 00102 ! gwc_thr=mss_frc_cly*(0.17d0+0.14d0*mss_frc_cly) ! [m3 m-3] FMB99 p. 155 (14) 00103 ! fxm: 19991105 remove factor of mss_frc_cly from gwc_thr to improve large scale behavior 00104 ! Begin Old Alf code 00105 ! gwc_thr(lon_idx)=0.17d0+0.14d0*mss_frc_cly(lon_idx) ! [m3 m-3] 00106 ! endif 00107 ! 00108 ! Factor by which surface roughness increases threshold friction velocity 00109 !++grini: fxm: USE WHOLE ARRAY OF Z0 INSTEAD OF ONLY RGH_MMN_MBL AS IN OLD CODE 00110 DO I = 1,SIZE(PZ0) 00111 CALL FRC_THR_NCR_DRG_GET(PZ0(I), XRGH_MMN_SMT, ZFRC_THR_NCR_DRG(I)) 00112 ENDDO 00113 ! 00114 ! Convert volumetric water content to gravimetric water content 00115 CALL VWC2GWC(GFLG_MBL, PWSAT, PWG, ZGWC_SFC) 00116 ! Factor by which soil moisture increases threshold friction velocity 00117 CALL FRC_THR_NCR_WTR_GET (GFLG_MBL, ZGWC_THR, ZGWC_SFC, ZFRC_THR_NCR_WTR) 00118 ! 00119 ! fxm: Use surface density not midlayer density 00120 CALL WND_FRC_THR_SLT_GET(PRHOA, XDMT_SLT_OPT, ZWND_FRC_THR_SLT) 00121 ! 00122 DO I = 1, KSIZE 00123 ZWND_FRC_THR_SLT(I) = & ! [m s-1] Threshold friction velocity for saltation 00124 ZWND_FRC_THR_SLT(I) * & ! [m s-1] Threshold for dry, flat ground 00125 ZFRC_THR_NCR_WTR(I) ! [frc] Adjustment for moisture 00126 ENDDO 00127 ! 00128 ! Threshold saltation wind speed 00129 !Needed for the saltation feedback roughening effect 00130 !do i=1,KSIZE 00131 ! if (flg_mbl(i)) then 00132 ! wnd_rfr_thr_slt(i)= & ! [m s-1] Threshold 10 m wind speed for saltation 00133 ! wnd_rfr(i)*wnd_frc_thr_slt(i)/PUSTAR(i) !++alfgr 00134 ! endif ! endif flg_mbl 00135 !end do ! end loop over lon 00136 00137 !CHECK IF THIS CAN BE USED EASILY 00138 !NEEDS 10M WIND SPEED WHICH IS MAYBE KNOWN MAYBE NOT ! 00139 ! Saltation increases friction speed by roughening surface 00140 !call wnd_frc_slt_get( & 00141 ! flg_mbl, & ! I [flg] Mobilization candidate flag 00142 ! PUSTAR, & ! I [m s-1] Surface friction velocity 00143 ! wnd_frc_slt, & ! O [m s-1] Saltating friction velocity 00144 ! wnd_rfr, & ! I [m s-1] Wind speed at reference height 00145 ! wnd_rfr_thr_slt) ! I [m s-1] Threshold 10 m wind speed for saltation 00146 ! 00147 ! 00148 !Skip the roughening of surface effect for now, and 00149 !just use the wind friction speed as it is modified 00150 !by drag partitioning 00151 ZWND_FRC_SLT(:) = PUSTAR(:) / ZFRC_THR_NCR_DRG(:) 00152 ! 00153 ! Horizontal streamwise mass flux for old "bulk" formulation 00154 ZCOEF(:) = XCST_SLT 00155 CALL FLX_MSS_HRZ_SLT_TTL_WHI79_GET(ZCOEF, GFLG_MBL, PRHOA, ZWND_FRC_SLT, & 00156 ZWND_FRC_THR_SLT, ZFLX_MSS_HRZ_SLT_TTL_WBN) 00157 ! 00158 ! Apply land surface and vegetation limitations and global tuning factor 00159 DO I = 1, KSIZE 00160 ZFLX_MSS_HRZ_SLT_TTL_WBN(I) = ZFLX_MSS_HRZ_SLT_TTL_WBN(I) & ! [kg m-2 s-1] 00161 !*lnd_frc_mbl(i) & ! [frc] Bare ground fraction 00162 * ZMBL_BSN_FCT(I) & ! [frc] Erodibility factor 00163 * XFLX_MSS_FDG_FCT ! [frc] Global mass flux tuning factor (empirical) 00164 ENDDO 00165 ! 00166 ! Vertical dust mass flux 00167 CALL FLX_MSS_VRT_DST_TTL_MAB95_GET(GFLG_MBL, ZCLAY, ZFLX_MSS_HRZ_SLT_TTL_WBN, & 00168 ZDST_SLT_FLX_RAT_TTL, ZFLX_MSS_VRT_DST_TTL_WBN) 00169 ! 00170 !Assign the output vertical dust flux to the value calculated 00171 !PSFDST(:) = flx_mss_vrt_dst_ttl_wbn(:) 00172 PSFDST(:) = ZDST_SLT_FLX_RAT_TTL(:) * ZFLX_MSS_HRZ_SLT_TTL_WBN(:) 00173 ! 00174 IF (LHOOK) CALL DR_HOOK('DUSTFLUX_GET',1,ZHOOK_HANDLE) 00175 ! 00176 END SUBROUTINE DUSTFLUX_GET
1.8.0