AquaticEcoDynamics / libaed-water

Code for the AED water quality model
GNU General Public License v3.0
6 stars 6 forks source link

add a salinity limitation function for nitrification and denitrification #34

Open aed-modeller opened 2 years ago

aed-modeller commented 2 years ago

https://github.com/AquaticEcoDynamics/libaed-water/blob/bd1babc7fe6ec22db27382e712f0101efbd3f270/src/aed_nitrogen.F90#L447

To condiser the inhibitation of hypersalinity on the nitrification/denitrification processes; Reference: Coorong T&I 1.2 report (Mosley et al., 2020); Enrich-Pratt, 2009; Isaji et al, 2019 ..

A proposed function is like below (same method for both nitrif/denit processes but different coefficients): IF( data%simNitrfSal ) nitrification = nitrification NitrfSalFunction(salModel, K_sal, S0, sal) IF( data%simNitrfSal ) denitrification = denitrification NitrfSalFunction(salModel, K_sal, S0, sal)

where salModel is switch of model selection, Sal is salinity, S0 is the threshold of Salinity starting to affect nit/denif, and Ksal is the half-saturation coefficient.

The function is as below:

FUNCTION NitrfSalFunction(salModel,K_sal,S0,salinity) RESULT(fSal) !------------------------------------------------------------------------------- ! Salinity dependency of nitrification/denitrification ! based on review of hypersalinity on N cycling, major refs: Mosley et al. 2020; ! Isaji et al. 2019; Enrich-Pratt et al. 2009 !------------------------------------------------------------------------------- !ARGUMENTS INTEGER,INTENT(in) :: salModel ! 0: no effect; 1: Michaelis Menten function, default = 0 AED_REAL,INTENT(in) :: K_sal ! half-saturation coefficient, default = 20 AED_REAL,INTENT(in) :: S0 ! salinity threshold, default = 40 AED_REAL,INTENT(in) :: salinity ! salinity ! !LOCALS AED_REAL :: fSal ! Returns the salinity function ! !------------------------------------------------------------------------------- !BEGIN fSal = 1.0 !## initialized to be 1

IF (salModel == 0) THEN ! no effect fSal = 1.0
ELSEIF (salModel == 1) THEN !# f(S) = 1 at S<=S0, f(S) = K_sal/(K_sal+S-S0) at S>S0 IF (salinity>S0) THEN fSal = K_sal / (K_sal + salinity - S0) ELSE fSal = 1.0 ENDIF ELSE PRINT *,'STOP: Unsupported salModel flag for nitrogen module' ENDIF

IF( fSal < zero ) fSal = zero

END FUNCTION NitrfSalFunction