SURFEX v7.3
General documentation of Surfex
|
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