SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/mode_sltmbl.F90
Go to the documentation of this file.
00001 MODULE MODE_SLTMBL
00002 
00003   !PURPOSE: 
00004   !Take input from ISBA land surface model and
00005   !calculate a salt flux which is consistent with the input.
00006 
00007   !THEORY:
00008   !Based on Marticorena/Bergametti, 1995 and Zender et al 2003 (JGR)
00009 
00010   !CODE HISTORY
00011   !Code is a modified version of dstmbl.F90 in the DEAD model
00012   !Original version was downloaded from the DEAD homepage
00013   !http://salt.ess.uci.edu/dead/ on January 10th 2005
00014 
00015   !AUTHOR (or rather "code modifyer")
00016   !Alf Grini <alf.grini@cnrm.meteo.fr>
00017 
00018 !
00019   USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00020   USE PARKIND1  ,ONLY : JPRB
00021 !
00022   implicit none
00023   public
00024 
00025 contains
00026 
00027   subroutine saltflux_get(          &
00028          PUSTAR,                     &!I [m/s] Wind friction speed 
00029          PRHOA,                     &!I [kg/m3] air density at 2m height 
00030          PWG,                       &!I [m3/m3] volumetric water content 
00031          PZ0,                       &!I [m] roughness length of surface
00032          PWSAT,                     &!I [m3 m-3] saturation liquid water content
00033          PCLAY,                     &!I [frc] mass fraction clay
00034          PSAND,                     &!I [frc] mass fraction sand
00035          PWIND10M,                  &!I [m/s] wind at 10m altitude
00036          PSFSLT,                    &!O [kg/m2/sec] Vertical salt flux
00037          KSIZE                     &!I [nbr] number of points for calculation
00038          )  
00039 
00040 
00041     implicit none
00042     
00043     !INPUT, set their dimensions to their passed lengths or to KSIZE ?
00044     integer, intent(in)                  :: KSIZE    ![nbr] length of passed arrays
00045     real, intent(in), dimension(KSIZE)   :: PUSTAR   ![m/s] wind friction speed
00046     real, intent(in), dimension(KSIZE)   :: PRHOA    ![kg/m3] air density
00047     real, intent(in), dimension(KSIZE)   :: PCLAY    ![frc] mass fraction clay
00048     real, intent(in), dimension(KSIZE)   :: PSAND    ![frc] mass fraction sand
00049     real, intent(in), dimension(KSIZE)   :: PWG      ![m3 m-3] volumetric water fraction
00050     real, intent(in), dimension(KSIZE)   :: PWSAT    ![m3 m-3] saturation water content
00051     real, intent(in), dimension(KSIZE)   :: PZ0      ![m] surface roughness length
00052     real, intent(in), dimension(KSIZE)   :: PWIND10M ![m/s] wind at 10m altitude
00053 
00054     !OUTPUT the flux of salt
00055     real, intent(out), dimension(KSIZE)  :: PSFSLT   ! [kg m-2 s-1] Output flux of atmospheric salt
00056 
00057 !!!!!!!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&!!!!!!
00058 
00059 !#ifdef AlG01
00060 !    real,parameter::flx_mss_fdg_fct=28. ! [frc] Global mass flux tuning factor (a posteriori)
00061 !#else
00062 !    real,parameter::flx_mss_fdg_fct=7.0e-4 ! [frc] Global mass flux tuning factor (a posteriori)
00063 !    real,parameter::flx_mss_fdg_fct=21.0e-4 ! [frc] Global mass flux tuning factor (a posteriori)
00064     real,parameter::flx_mss_fdg_fct=18.0e-4 ! [frc] Global mass flux tuning factor (a posteriori)
00065 !#endif
00066     real,parameter::hgt_rfr=10.0 ! [m] Reference height for mobilization processes
00067     real,parameter::hgt_zpd_mbl=0.0 ! [m] Zero plane displacement for erodible surfaces
00068     real,parameter::rgh_mmn_mbl=100.0e-6 ! [m] Roughness length momentum for erodible surfaces MaB95 p. 16420, GMB98 p. 6205
00069     ! fxm: rgh_mmn_smt set to 33.3e-6 um, MaB95 p. 16426 recommend 10.0e-6
00070     real,parameter::rgh_mmn_smt=33.3e-6 ! [m] Smooth roughness length MaB95 p. 16426, MaB97 p. 4392, GMB98 p. 6207
00071     real,parameter::wnd_min_mbl=1.0 ! [m s-1] Minimum windspeed used for mobilization 
00072     real,parameter::wnd_frc_rsl=0.95d0 ! [frc] Fraction of wind PDF to resolve 
00073 
00074     !Define local variables:
00075     logical,allocatable :: flg_mbl(:)          ![frc] Mobilization candidate flag
00076     real, allocatable   :: frc_thr_ncr_drg(:)  ![frc] fraction by which drag partitioning increases threshold wind
00077     real, allocatable   :: frc_thr_ncr_wtr(:)  ![frc] Fraction by which soil wetness increases threshold wind
00078     real, allocatable   :: gwc_sfc(:)          ![kg/kg] Gravimetric water content
00079     real, allocatable   :: wnd_frc_thr_slt(:)  ![m/s] Threshold wind friction speed when all effects taken into account
00080     real, allocatable   :: wnd_frc_slt(:)         ![m/s] wind friction speed after modified for saltation feedbacks
00081     real, allocatable   :: flx_mss_hrz_slt_ttl_wbn(:) ![kg m-1 s-1] Vertically integrated horizontal saltation soil flux for a wind bin 
00082     real, allocatable   :: flx_mss_vrt_dst_ttl_wbn(:)     ![kg m-2 s-1]
00083     real, allocatable   :: wnd_rfr_thr_slt(:)             ![m s-1] Threshold wind speed at reference level
00084     real, allocatable   :: mbl_bsn_fct(:)                 ![frc] enhancement factor for grid cells with higher erodibility
00085     real, allocatable   :: dst_slt_flx_rat_ttl(:)         ![m-1] ratio of vertical to horizontal flux (alpha in several papers)
00086     real, allocatable   :: ZCLAY(:)                       ![frc] dummy for fraction of clay
00087 
00088     integer             :: i                   !Counter for number of points (used in loops)
00089     REAL(KIND=JPRB) :: ZHOOK_HANDLE
00090     
00091     !Allocate the local variables
00092     IF (LHOOK) CALL DR_HOOK('MODE_SLTMBL:SALTFLUX_GET',0,ZHOOK_HANDLE)
00093     allocate (flg_mbl(KSIZE))
00094     allocate (frc_thr_ncr_drg(KSIZE))
00095     allocate (frc_thr_ncr_wtr(KSIZE))
00096     allocate (gwc_sfc(KSIZE))
00097     allocate (wnd_frc_thr_slt(KSIZE))
00098     allocate (wnd_frc_slt(KSIZE))
00099     allocate (flx_mss_hrz_slt_ttl_wbn(KSIZE))
00100     allocate (flx_mss_vrt_dst_ttl_wbn(KSIZE))
00101     allocate (wnd_rfr_thr_slt(KSIZE))
00102     allocate (mbl_bsn_fct(KSIZE))
00103     allocate (dst_slt_flx_rat_ttl(KSIZE))
00104     allocate (ZCLAY(KSIZE))
00105 
00106     !Initialize mobilization candidate flag
00107     flg_mbl(:)=.TRUE.
00108     
00109     !Initialize vertical salt flux
00110     flx_mss_vrt_dst_ttl_wbn(:)=0.d0
00111 
00112     !fxm: Get erodibility limitation factor, use something connected to amount of sand
00113     !Discuss with Valery Masson
00114     mbl_bsn_fct(:)=PSAND(:)
00115  
00116     ! Factor by which surface roughness increases threshold friction velocity 
00117     !++grini: fxm: USE WHOLE ARRAY OF Z0 INSTEAD OF ONLY RGH_MMN_MBL AS IN OLD CODE
00118 
00119 
00120     !Free memory for allocated local variables
00121     deallocate (flg_mbl)
00122     deallocate (frc_thr_ncr_drg)
00123     deallocate (frc_thr_ncr_wtr)
00124     deallocate (gwc_sfc)
00125     deallocate (wnd_frc_thr_slt)
00126     deallocate (wnd_frc_slt)
00127     deallocate (flx_mss_hrz_slt_ttl_wbn)
00128     deallocate (flx_mss_vrt_dst_ttl_wbn)
00129     deallocate (wnd_rfr_thr_slt)
00130     deallocate (mbl_bsn_fct)
00131     deallocate (dst_slt_flx_rat_ttl)
00132     deallocate (ZCLAY)
00133   IF (LHOOK) CALL DR_HOOK('MODE_SLTMBL:SALTFLUX_GET',1,ZHOOK_HANDLE)
00134 
00135   end subroutine saltflux_get
00136 
00137 END MODULE MODE_SLTMBL