#include "cppdefs.h" MODULE comMUSTANG #ifdef MUSTANG !!============================================================================ !! *** MODULE comMUSTANG *** !! Purpose : declare all common variables related to sediment dynamics !!============================================================================ !! * Modules used USE comsubstance ! for lchain, rsh, rlg, riosh implicit none ! default public #include "coupler_define_MUSTANG.h" !! * Shared or public variables for MUSTANG ! parameters REAL(kind=rlg), PARAMETER :: epsi30_MUSTANG = 1.e-30 REAL(kind=rlg), PARAMETER :: epsilon_MUSTANG = 1.e-09 REAL(kind=rsh), PARAMETER :: valmanq = 999.0 REAL(kind=riosh), PARAMETER :: rg_valmanq_io = 999.0 ! namelists ! namsedim_init CHARACTER(len=19) :: date_start_dyninsed ! starting date for dynamic ! processes in sediment; format '01/01/0000 00:00:00' CHARACTER(len=19) :: date_start_morpho ! starting date for morphodynamic; ! format '01/01/0000 00:00:00' LOGICAL :: l_repsed ! set to .true. if sedimentary variables are ! initialized from a previous run LOGICAL :: l_initsed_vardiss !set to .true. if initialization of dissolved ! variables, temperature and salinity in sediment (will be done with ! concentrations in water at bottom (k=1)) LOGICAL :: l_unised !set to .true. for a uniform bottom initialization LOGICAL :: l_init_hsed ! set to .true. if we want to adjust the sediment ! thickness in order to be coherent with sediment ! parameters (calculation of a new hseduni based on ! cseduni, cvolmax values, and csed_ini of each sediment) CHARACTER(len=lchain) :: filrepsed ! file path from which the model is ! initialized for the continuation of a previous run CHARACTER(len=lchain) :: fileinised ! file path for initialization (if ! l_unised is False) REAL(KIND=rsh) :: cseduni ! initial sediment concentration (kg/m3) REAL(KIND=rsh) :: hseduni ! initial uniform sediment thickness (m) REAL(KIND=rsh) :: csed_mud_ini ! real, mud concentration into initial ! sediment (kg/m3) (if = 0. ==> csed_mud_ini = cfreshmud) INTEGER :: ksmiuni ! lower grid cell index in the sediment INTEGER :: ksmauni ! upper grid cell index in the sediment REAL(KIND=rsh) :: sini_sed ! initial interstitial water uniform salinity REAL(KIND=rsh) :: tini_sed ! initial interstitial water uniform temperature REAL(KIND=rsh) :: poro_mud_ini !only if key_MUSTANG_V2, initial porosity of ! mud fraction ! namsedim_layer LOGICAL :: l_dzsmaxuni ! set to .true. dzsmax = dzsmaxuni , ! if set to .false. then linearly computed in MUSTANG_sedinit ! from dzsmaxuni to dzsmaxuni/100 depending on water depth LOGICAL :: l_dzsminuni !only if key_MUSTANG_V2, set to .false. if dzsmin ! vary with sediment bed composition, else dzsmin = dzsminuni REAL(KIND=rsh) :: dzsminuni !only if key_MUSTANG_V2, minimum sediment ! layer thickness (m) REAL(KIND=rsh) :: dzsmin ! minimum sediment layer thickness (m) REAL(KIND=rsh) :: dzsmaxuni ! uniform maximum thickness for the superficial ! sediment layer (m), must be >0 REAL(KIND=rsh) :: dzsmax_bottom ! maximum thickness of bottom layers ! which result from the fusion when ksdmax is exceeded (m) REAL(KIND=rsh) :: k1HW97 !only if key_MUSTANG_V2, ! ref value k1HW97 = 0.07, parameter to compute active layer ! thickness (Harris and Wiberg, 1997) REAL(KIND=rsh) :: k2HW97 !only if key_MUSTANG_V2 ! rref value k2HW97 = 6.0,parameter to compute active layer ! thickness (Harris and Wiberg, 1997) REAL(KIND=rsh) :: fusion_para_activlayer !only if key_MUSTANG_V2 ! criterion cohesiveness for fusion in active layer ! 0 : no fusion, ! = 1 : frmudcr1, ! > 1 : between frmudcr1 & frmudcr2 INTEGER :: nlayer_surf_sed ! number of layers below the sediment surface ! that can not be melted (max thickness = dzsmax) ! namsedim_bottomstress LOGICAL :: l_z0seduni ! boolean, set to .false. for z0sed computation from ! sediment diameter (if true, z0seduni is used) REAL(KIND=rsh) :: z0seduni ! uniform bed roughness (m) REAL(KIND=rsh) :: z0sedmud ! mud (i.e.minimum) bed roughness (m) ! (used only if l_unised is false) REAL(KIND=rsh) :: z0sedbedrock ! bed roughness for bedrock (no sediment) (m) ! (used only if l_unised is false) LOGICAL :: l_fricwave ! boolean, set to .true. if using wave related friction ! factor for bottom shear stress (from wave orbital velocity and period) ! if .false. then fricwav namelist value is used REAL(KIND=rsh) :: fricwav ! default value is 0.06, wave related friction !factor (used for bottom shear stress computation) LOGICAL :: l_z0hydro_coupl_init ! boolean, set to .true. if evaluation of ! z0 hydro depends on sediment composition at the beginning ! of the simulation LOGICAL :: l_z0hydro_coupl ! boolean, set to .true. if evaluation of ! z0 hydro depends on sediment composition along the run REAL(KIND=rsh) :: coef_z0_coupl ! parameter to compute z0hydro in the ! first centimeter : z0hydro = coef_z0_coupl * sand diameter REAL(KIND=rsh) :: z0_hydro_mud ! z0hydro if pure mud (m) REAL(KIND=rsh) :: z0_hydro_bed ! z0hydro if no sediment (m) ! namsedim_deposition REAL(KIND=rsh) :: cfreshmud ! fresh deposit concentration (kg/m3) ! (must be around 100 if consolidation ! or higher (300-500 if no consolidation) REAL(KIND=rsh) :: csedmin ! concentration of the upper layer under ! which there is fusion with the underlying sediment cell (kg/m3) REAL(KIND=rsh) :: cmudcr ! critical relative concentration of the surface ! layer above which no mixing is allowed with the underlying ! sediment (kg/m3) REAL(KIND=rsh) :: aref_sand ! parameter used in sandconcextrap, ! reference height above sediment, used for computing of ! sand deposit. Parameter used for sand extrapolation on water ! column and correct sand transport, value by default = 0.02 ! correspond to Van Rijn experiments ! DO NOT CHANGED IF NOT EXPERT REAL(KIND=rsh) :: cvolmaxsort ! max volumic concentration of sorted sand REAL(KIND=rsh) :: cvolmaxmel ! maxvolumic concentration of mixed sediments REAL(KIND=rsh) :: slopefac !slope effect multiplicative on deposit ! (only if key_MUSTANG_slipdeposit) ! namsedim_erosion REAL(KIND=rsh) :: activlayer ! active layer thickness (m) REAL(KIND=rsh) :: frmudcr2 ! critical mud fraction under which the ! behaviour is intermediate between sand and mud and above which the ! behavior is purely muddy REAL(KIND=rsh) :: coef_frmudcr1 ! to compute critical mud fract. frmudcr1 ! underwhich the behaviour is purely sandy ! (frmudcr1=min(coef_frmudcr1*d50 sand,frmudcr2)) REAL(KIND=rsh) :: x1toce_mud ! coef. for the formulation of the critical ! erosion stress in mud behavior toce=x1toce*csed**x2toce REAL(KIND=rsh) :: x2toce_mud ! coef. for the formulation of the critical ! erosion stress in mud behavior toce=x1toce*csed**x2toce REAL(KIND=rsh) :: E0_sand_para ! coefficient used to modulate erosion ! flux for sand (=1 if no correction ) REAL(KIND=rsh) :: n_eros_sand ! parameter for erosion flux for sand ! (E0_sand*(tenfo/toce-1.)**n_eros_sand ) ! WARNING : choose parameters compatible with E0_sand_option ! (example : n_eros_sand=1.6 for E0_sand_option=1) REAL(KIND=rsh) :: E0_mud ! erosion flux for mud REAL(KIND=rsh) :: n_eros_mud ! E0_mud*(tenfo/toce-1.)**n_eros_mud INTEGER :: ero_option ! choice of erosion formulation for mixing ! sand-mud ! ero_option= 0 : pure mud behavior ! ero_option= 1 : linear interpolation between sand and mud behavior, ! depend on proportions of the mixture ! ero_option= 2 : formulation derived from that of J.Vareilles (2013) ! ero_option= 3 : formulations proposed by B. Mengual (2015) with ! exponential coefficients depend on proportions of the mixture INTEGER :: E0_sand_option ! integer, choice of formulation for ! E0_sand evaluation : ! E0_sand_option = 0 E0_sand = E0_sand_Cst ! E0_sand_option = 1 E0_sand evaluated with Van Rijn (1984) ! E0_sand_option = 2 E0_sand evaluated with erodimetry ! (min(0.27,1000*d50-0.01)*toce**n_eros_sand) ! E0_sand_option = 3 E0_sand evaluated with Wu and Lin (2014) REAL(KIND=rsh) :: xexp_ero !used only if ero_option=3 : adjustment on ! exponential variation (more brutal when xexp_ero high) REAL(KIND=rsh) :: E0_sand_Cst ! constant erosion flux for sand ! (used if E0_sand_option= 0) REAL(KIND=rsh) :: E0_mud_para_indep !only if key_MUSTANG_V2, ! parameter to correct E0_mud in case of erosion ! class by class in non cohesive regime LOGICAL :: l_peph_suspension !only if key_MUSTANG_V2, ! set to .true. if hindering / exposure processes in critical ! shear stress estimate for suspension LOGICAL :: l_eroindep_noncoh !only if key_MUSTANG_V2, ! set to .true. in order to activate independant erosion for ! the different sediment classes sands and muds ! set to .false. to have the mixture mud/sand eroded as in V1 LOGICAL :: l_eroindep_mud !only if key_MUSTANG_V2, ! set to .true. if mud erosion independant for sands erosion ! set to .false. if mud erosion proportionnal to total sand erosion LOGICAL :: l_xexp_ero_cst !only if key_MUSTANG_V2, set to .true. ! if xexp_ero estimated from empirical formulation, depending on ! frmudcr1 INTEGER :: tau_cri_option !only if key_MUSTANG_V2, ! choice of critical stress formulation , ! 0: Shields 1: Wu and Lin (2014) INTEGER :: tau_cri_mud_option_eroindep !only if key_MUSTANG_V2 ! choice of mud critical stress formulation ! 0: x1toce_mud*cmudr**x2toce_mud ! 1: toce_meansan if somsan>eps (else->case0) ! 2: minval(toce_sand*cvsed/cvsed+eps) if >0 (else->case0) ! 3: min( case 0; toce(isand2) ) #ifdef key_MUSTANG_V2 ! namsedim_poro INTEGER :: poro_option ! choice of porosity formulation ! 1: Wu and Li (2017) (incompatible with consolidation)) ! 2: mix ideal coarse/fine packing REAL(KIND=rsh) :: Awooster ! parameter of the formulation of ! Wooster et al. (2008) for estimating porosity associated to the ! non-cohesive sediment see Cui et al. (1996) ref value = 0.42 REAL(KIND=rsh) :: Bwooster ! parameter of the formulation of ! Wooster et al. (2008) for estimating porosity associated to the ! non-cohesive sediment see Cui et al. (1996) ref value = -0,458 REAL(KIND=rsh) :: Bmax_wu ! maximum portion of the coarse sediment class ! participating in filling , ref value = 0.65 REAL(KIND=rsh) :: poro_min ! minimum porosity below which consolidation ! is stopped #endif #if defined key_MUSTANG_V2 && defined key_MUSTANG_bedload ! namsedim_bedload LOGICAL :: l_peph_bedload ! set to .true. if hindering / exposure processes ! in critical shear stress estimate for bedload LOGICAL :: l_slope_effect_bedload ! set to .true. if accounting for slope ! effects in bedload fluxes (Lesser formulation) LOGICAL :: l_fsusp ! limitation erosion fluxes of non-coh sediment in case ! of simultaneous bedload transport, according to Wu & Lin formulations ! set to .true. if erosion flux is fitted to total transport ! should be set to .false. if E0_sand_option=3 (Wu & Lin) REAL(KIND=rsh) :: alphabs ! coefficient for slope effects (default ! coefficients Lesser et al. (2004), alphabs = 1.) REAL(KIND=rsh) :: alphabn ! coefficient for slope effects (default ! coefficients Lesser et al. (2004), default alphabn is 1.5 but ! can be higher, until 5-10 (Gerald Herling experience)) REAL(KIND=rsh) :: hmin_bedload ! no bedload in u/v directions if ! h0+ssh <= hmin_bedload in neighbouring cells #endif !**TODO** put under cpp key #ifdef key_MUSTANG_lateralerosion ! namsedim_lateral_erosion REAL(KIND=rsh) :: htncrit_eros ! critical water height so as to prevent ! erosion under a given threshold (the threshold value is different for ! flooding or ebbing, cf. Hibma's PhD, 2004, page 78) REAL(KIND=rsh) :: coef_erolat ! slope effect multiplicative factor REAL(KIND=rsh) :: coef_tauskin_lat ! parameter to evaluate the lateral ! stress as a function of the average tangential velocity on the ! vertical LOGICAL :: l_erolat_wet_cell ! set to .true in order to take ! into account wet cells lateral erosion !**TODO** put under cpp key #key_MUSTANG_lateralerosion ! namsedim_consolidation LOGICAL :: l_consolid ! set to .true. if sediment consolidation is ! accounted for REAL(KIND=rsh) :: dt_consolid ! time step for consolidation processes REAL(KIND=rlg) :: subdt_consol ! sub time step for consolidation and ! particulate bioturbation in sediment REAL(KIND=rsh) :: csegreg ! NOT CHANGE VALUE if not expert, default 250.0 REAL(KIND=rsh) :: csandseg ! NOT CHANGE VALUE if not expert, default 1250.0 REAL(KIND=rsh) :: xperm1 ! permeability=xperm1*d50*d50*voidratio**xperm2 REAL(KIND=rsh) :: xperm2 ! permeability=xperm1*d50*d50*voidratio**xperm2 REAL(KIND=rsh) :: xsigma1 ! parameter used in Merckelback & Kranenburg s ! (2004) formulation NOT CHANGE VALUE if not expert, default 6.0e+05 REAL(KIND=rsh) :: xsigma2 ! parameter used in Merckelback & Kranenburg s ! (2004) formulation NOT CHANGE VALUE if not expert, default 6 ! namsedim_diffusion LOGICAL :: l_diffused ! set to .true. if taking into account ! dissolved diffusion in sediment and at the water/sediment interface REAL(KIND=rsh) :: dt_diffused ! time step for diffusion in sediment INTEGER :: choice_flxdiss_diffsed ! choice for expression of ! dissolved fluxes at sediment-water interface ! 1 : Fick law : gradient between Cv_wat at dz(1)/2 ! 2 : Fick law : gradient between Cv_wat at distance epdifi REAL(KIND=rsh) :: xdifs1 ! diffusion coefficients within the sediment REAL(KIND=rsh) :: xdifsi1 ! diffusion coefficients at the water-sediment ! interface REAL(KIND=rsh) :: epdifi ! diffusion thickness in the water at the ! sediment-water interface REAL(KIND=rsh) :: fexcs ! factor of eccentricity of concentrations in ! vertical fluxes evaluation (.5 a 1) ! namsedim_bioturb LOGICAL :: l_bioturb ! set to .true. if taking into account ! particulate bioturbation (diffusive mixing) in sediment LOGICAL :: l_biodiffs ! set to .true. if taking into account ! dissolved bioturbation diffusion in sediment REAL(KIND=rsh) :: dt_bioturb ! time step for bioturbation in sediment REAL(KIND=rsh) :: subdt_bioturb ! sub time step for bioturbation REAL(KIND=rsh) :: xbioturbmax_part ! max particular bioturbation ! coefficient by bioturbation Db (in surface) REAL(KIND=rsh) :: xbioturbk_part ! for part. bioturbation coefficient ! between max Db at sediment surface and 0 at bottom REAL(KIND=rsh) :: dbiotu0_part ! max depth beneath the sediment ! surface below which there is no bioturbation REAL(KIND=rsh) :: dbiotum_part ! sediment thickness where the ! part-bioturbation coefficient Db is constant (max) REAL(KIND=rsh) :: xbioturbmax_diss ! max diffusion coeffient by ! biodiffusion Db (in surface) REAL(KIND=rsh) :: xbioturbk_diss ! coef (slope) for biodiffusion ! coefficient between max Db at sediment surface and 0 at bottom REAL(KIND=rsh) :: dbiotu0_diss ! max depth beneath the sediment ! surface below which there is no bioturbation REAL(KIND=rsh) :: dbiotum_diss ! sediment thickness where the ! diffsolved-bioturbation coefficient Db is constant (max) REAL(KIND=rsh) :: frmud_db_min ! mud fraction limit (min) below which ! there is no Biodiffusion REAL(KIND=rsh) :: frmud_db_max ! mud fraction limit (max)above which ! the biodiffusion coefficient Db is maximum (muddy sediment) ! namsedim_morpho LOGICAL :: l_morphocoupl ! set to .true if coupling module morphodynamic LOGICAL :: l_MF_dhsed ! set to .true. if morphodynamic applied with ! sediment height variation amplification ! (MF_dhsed = MF; then MF will be = 0) ! set to .false. if morphodynamic is applied with ! erosion/deposit fluxes amplification (MF_dhsed not used) LOGICAL :: l_bathy_actu ! set to .true. if reading a new bathy issued a ! previous run and saved in filrepsed (given in namelist namsedim_init) !!! NOT IMPLEMENTED YET !!! **TODO** REAL(KIND=rsh) :: MF ! morphological factor : multiplication factor for ! morphologicalevolutions, equivalent to a "time acceleration" ! (morphological evolutions over a MF*T duration are assumed to be ! equal to MF * the morphological evolutions over T). REAL(KIND=rlg) :: dt_morpho ! time step for morphodynamic (s) #if ! defined key_noTSdiss_insed ! namtempsed REAL(KIND=rsh) :: mu_tempsed1 ! parameters used to estimate thermic ! diffusitiyfunction of mud fraction REAL(KIND=rsh) :: mu_tempsed2 ! parameters used to estimate thermic ! diffusitiyfunction of mud fraction REAL(KIND=rsh) :: mu_tempsed3 ! parameters used to estimate thermic ! diffusitiyfunction of mud fraction REAL(KIND=rsh) :: epsedmin_tempsed ! sediment thickness limits for ! estimation heat loss at bottom, if hsed < epsedmin_tempsed : ! heat loss at sediment bottom = heat flux a sediment surface REAL(KIND=rsh) :: epsedmax_tempsed ! sediment thickness limits for ! estimation heat loss at bottom, if hsed > epsedmax_tempsed : ! heat loss at sediment bottom = 0. #endif ! namsedoutput LOGICAL :: l_outsed_flx_WS_all ! set to .true. if output fluxes threw ! interface Water/sediment (2 2D variables per ! constitutive particulate variable) LOGICAL :: l_outsed_flx_WS_int ! set to .true. if output fluxes threw ! interface Water/sediment (integration on all ! constitutive particulate variables) LOGICAL :: l_outsed_saltemp ! set to .true. if output Salinity and ! Temperature in sediment INTEGER :: nk_nivsed_out ! number of saved sediment layers ! unused if choice_nivsed_out = 1 !