SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/dustflux_get.F90
Go to the documentation of this file.
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