diff --git a/src/clearwater_modules/nsm1/processes.py b/src/clearwater_modules/nsm1/processes.py index c22d4a2..e452e4f 100644 --- a/src/clearwater_modules/nsm1/processes.py +++ b/src/clearwater_modules/nsm1/processes.py @@ -116,16 +116,16 @@ def kah_20( def kah_tc( TwaterC: xr.DataArray, kah_20: xr.DataArray, - theta: xr.DataArray + kah_theta: xr.DataArray ) -> xr.DataArray: """Calculate the temperature adjusted hydraulic oxygen reaeration rate (/d) Args: TwaterC: Water temperature in Celsius kah_20: Hydraulic oxygen reaeration rate at 20 degrees Celsius - theta: Arrhenius coefficient + kah_theta: Arrhenius coefficient for hydraulic oxygen reaeration rate """ - return arrhenius_correction(TwaterC, kah_20, theta) + return arrhenius_correction(TwaterC, kah_20, kah_theta) def kaw_20( @@ -192,16 +192,16 @@ def kaw_20( def kaw_tc( TwaterC: xr.DataArray, kaw_20: xr.DataArray, - theta: xr.DataArray + kaw_theta: xr.DataArray ) -> xr.DataArray: """Calculate the temperature adjusted wind oxygen reaeration velocity (m/d) Args: water_temp_c: Water temperature in Celsius kaw_20: Wind oxygen reaeration velocity at 20 degrees Celsius - theta: Arrhenius coefficient + kaw_theta: Arrhenius coefficient for wind oxygen reaeration velocity """ - return arrhenius_correction(TwaterC, kaw_20, theta) + return arrhenius_correction(TwaterC, kaw_20, kaw_theta) @@ -232,7 +232,7 @@ def SOD_tc( Args: SOD_20: Sediment oxygen demand at 20 degrees celsius (mg-O2/m2) TwaterC: Water temperature in degrees C - theta: Arrhenius coefficient + SOD_theta: Arrhenius coefficient for sediment oxygen demand use_DOX: Option to consider DOX concentration in water in calculation of sediment oxygen demand """ SOD_tc = arrhenius_correction(TwaterC, SOD_20, SOD_theta) @@ -370,46 +370,52 @@ def rda( def mu_max_tc( TwaterC: xr.DataArray, - mu_max_20: xr.DataArray + mu_max_20: xr.DataArray, + mu_max_theta: xr.DataArray ) -> xr.DataArray: """Calculate mu_max_tc (1/d). Args: TwaterC: Water temperature (C) mu_max: Max Algae growth (1/d) + mu_max_theta: Arrhenius coefficient for max algal growth rate """ - return arrhenius_correction(TwaterC, mu_max_20, 1.047) + return arrhenius_correction(TwaterC, mu_max_20, mu_max_theta) def krp_tc( TwaterC: xr.DataArray, - krp_20: xr.DataArray + krp_20: xr.DataArray, + krp_theta: xr.DataArray ) -> xr.DataArray: """Calculate krp_tc (1/d). Args: TwaterC: Water temperature (C) krp: Algal respiration rate at 20 degree (1/d) + krp_theta: Arrhenius coefficient for algal respiration rate """ - return arrhenius_correction(TwaterC, krp_20, 1.047) + return arrhenius_correction(TwaterC, krp_20, krp_theta) def kdp_tc( TwaterC: xr.DataArray, - kdp_20: xr.DataArray + kdp_20: xr.DataArray, + kdp_theta: xr.DataArray ) -> xr.DataArray: """Calculate kdp_tc (1/d). Args: TwaterC: Water temperature (C) kdp: Algal death rate at 20 degree (1/d) + kdp_theta: Arrhenius coefficient for algal death rate """ - return arrhenius_correction(TwaterC, kdp_20, 1.047) + return arrhenius_correction(TwaterC, kdp_20, kdp_theta) def FL( @@ -700,44 +706,49 @@ def Ap( def mub_max_tc( mub_max_20: xr.DataArray, - TwaterC: xr.DataArray + TwaterC: xr.DataArray, + mub_max_theta: xr.DataArray ) -> xr.DataArray: """Calculate mub_max_tc: Maximum benthic algal growth rate with temperature correction (1/d). Args: mu_max_20: Maximum benthic algal growth rate at 20C (1/d) TwaterC: Water temperature (C) + mub_max_theta: Arrhenius coefficient for benthic algae max growth rate """ - return arrhenius_correction(TwaterC, mub_max_20, 1.047) + return arrhenius_correction(TwaterC, mub_max_20, mub_max_theta) def krb_tc( krb_20: xr.DataArray, - TwaterC: xr.DataArray + TwaterC: xr.DataArray, + krb_theta: xr.DataArray ) -> xr.DataArray: """Calculate krb_tc: Benthic algae respiration rate with temperature correction (1/d). Args: krb_20: Benthic algae respiration rate at 20C (1/d) TwaterC: Water temperature (C) + krb_theta: Arrhenius coefficient for benthic algae respiration rate """ - return arrhenius_correction(TwaterC, krb_20, 1.047) + return arrhenius_correction(TwaterC, krb_20, krb_theta) def kdb_tc( kdb_20: xr.DataArray, - TwaterC: xr.DataArray + TwaterC: xr.DataArray, + kdb_theta: xr.DataArray ) -> xr.DataArray: """Calculate kdb_tc: Benthic algae mortality rate with temperature correction (1/d). Args: kdb_20: Benthic algae mortality rate at 20C (1/d) TwaterC: Water temperature (C) + kdb_theta: Arrhenius coefficient for benthic algae death rate """ - return arrhenius_correction(TwaterC, kdb_20, 1.047) - + return arrhenius_correction(TwaterC, kdb_20, kdb_theta) def rnb( @@ -1116,76 +1127,86 @@ def Chlb( def knit_tc( TwaterC: xr.DataArray, - knit_20: xr.DataArray + knit_20: xr.DataArray, + knit_theta: xr.DataArray ) -> xr.DataArray: """Calculate knit_tc: Nitrification rate ammonia decay NH4 to NO3 temperature correction (1/d). #TODO only if use_NH4 = true Args: TwaterC: Water temperature (C) knit_20: Nitrification rate ammonia decay (1/d) + knit_theta: Arrhenius coefficient for ammonia decay """ - return arrhenius_correction(TwaterC, knit_20, 1.047) + return arrhenius_correction(TwaterC, knit_20, knit_theta) def rnh4_tc( TwaterC: xr.DataArray, - rnh4_20: xr.DataArray + rnh4_20: xr.DataArray, + rnh4_theta: xr.DataArray ) -> xr.DataArray: """Calculate rnh4_tc: Sediment release rate of NH4 temperature correction(1/d). #TODO only if use_sedflux = true Args: TwaterC: Water temperature (C) rnh4_20: Sediment release rate of NH4 (1/d) + rnh4_theta: Arrhenius coefficient for rate of sediment release rate of NH4 """ - return arrhenius_correction(TwaterC, rnh4_20, 1.074) + return arrhenius_correction(TwaterC, rnh4_20, rnh4_theta) def vno3_tc( TwaterC: xr.DataArray, - vno3_20: xr.DataArray + vno3_20: xr.DataArray, + vno3_theta: xr.DataArray ) -> xr.DataArray: """Calculate vno3_tc: Sediment denitrification velocity temperature correction (m/d). #TODO only if use_sedflux = true Args: TwaterC: Water temperature (C) vno3_20: Sedimet release rate of NO3 (1/d) + vno3_theta: Arrhenius coefficient for sediment denitrification rate """ - return arrhenius_correction(TwaterC, vno3_20, 1.08) + return arrhenius_correction(TwaterC, vno3_20, vno3_theta) def kon_tc( TwaterC: xr.DataArray, - kon_20: xr.DataArray + kon_20: xr.DataArray, + kon_theta: xr.DataArray ) -> xr.DataArray: """Calculate kon_tc: Decay rate of OrgN to NH4 temperature correction(1/d). #TODO only if use_OrgN = true Args: TwaterC: Water temperature (C) kon_20: Decay rate of OrgN to NH4 (1/d) + kon_theta: Arrhenius coefficient for decay rate of OrgN """ - return arrhenius_correction(TwaterC, kon_20, 1.074) + return arrhenius_correction(TwaterC, kon_20, kon_theta) def kdnit_tc( TwaterC: xr.DataArray, - kdnit_20: xr.DataArray + kdnit_20: xr.DataArray, + kdnit_theta: xr.DataArray ) -> xr.DataArray: """Calculate kdnit_tc: Denitrification rate temperature correction (1/d). #TODO only if use_NO3 = true Args: TwaterC: Water temperature (C) kdnit_20: Denitrification rate (1/d) + kdnit_theta: Arrhenius coefficient for denitrification rate """ - return arrhenius_correction(TwaterC, kdnit_20, 1.047) + return arrhenius_correction(TwaterC, kdnit_20, kdnit_theta) def ApUptakeFr_NH4( @@ -1813,7 +1834,8 @@ def TN( def kop_tc( TwaterC : xr.DataArray, - kop_20: xr.DataArray + kop_20: xr.DataArray, + kop_theta: xr.DataArray ) -> xr.DataArray : """Calculate kop_tc: Decay rate of organic P to DIP temperature correction (1/d). @@ -1821,14 +1843,16 @@ def kop_tc( Args: TwaterC: Water temperature (C) kop_20: Decay rate of organic P to DIP at 20C (1/d) + kop_theta: Arrenhius correction for decay rate of Org P """ - return arrhenius_correction(TwaterC, kop_20, 1.047) + return arrhenius_correction(TwaterC, kop_20, kop_theta) def rpo4_tc( TwaterC : xr.DataArray, - rpo4_20: xr.DataArray + rpo4_20: xr.DataArray, + rpo4_theta: xr.DataArray ) -> xr.DataArray : """Calculate rpo4_tc: Benthic sediment release rate of DIP temperature correction(g-P/m2/d). @@ -1836,9 +1860,10 @@ def rpo4_tc( Args: TwaterC: Water temperature (C) kop_20: Benthic sediment release rate of DIP at 20C (1/d) + rpo4_theta: Arrhenius coefficient for sediment release rate of DIP """ - return arrhenius_correction(TwaterC, rpo4_20, 1.074) + return arrhenius_correction(TwaterC, rpo4_20, rpo4_theta) def OrgP_DIP_decay( kop_tc : xr.DataArray, @@ -2156,16 +2181,18 @@ def DIP( ################################### From POM def kpom_tc( - TwaterC: float, - kpom_20: float, + TwaterC: xr.DataArray, + kpom_20: xr.DataArray, + kpom_theta: xr.DataArray ) -> float: """Calculate the temperature adjusted POM dissolution rate (1/d) Args: TwaterC: Water temperature in Celsius kpom_20: POM dissolution rate at 20 degrees Celsius (1/d) + kpom_theta: Arrhenius coefficient for POM dissolution rate """ - return arrhenius_correction(TwaterC, kpom_20, 1.047) + return arrhenius_correction(TwaterC, kpom_20, kpom_theta) def POM_algal_settling( @@ -2305,15 +2332,17 @@ def POM( def kbod_tc( TwaterC: xr.DataArray, kbod_20: xr.DataArray, + kbod_theta: xr.DataArray ) -> xr.DataArray: """Calculate the temperature adjusted CBOD oxidation rate (1/d) Args: TwaterC: water temperature in Celsius kbod_20: CBOD oxidation rate at 20 degrees Celsius (1/d) + kbod_theta: Arrhenius coefficient for CBOD oxidation rate """ - kbod_tc = arrhenius_correction(TwaterC, kbod_20, 1.047) + kbod_tc = arrhenius_correction(TwaterC, kbod_20, kbod_theta) return kbod_tc @@ -2321,15 +2350,17 @@ def kbod_tc( def ksbod_tc( TwaterC: xr.DataArray, ksbod_20: xr.DataArray, + ksbod_theta: xr.DataArray ) -> xr.DataArray: """Calculate the temperature adjusted CBOD sedimentation rate (m/d) Args: TwaterC: water temperature in Celsius ksbod_20: CBOD sedimentation rate at 20 degrees Celsius (m/d) + ksbod_theta: Arrhenius coefficient for CBOD sedimentation rate """ - ksbod_tc = arrhenius_correction(TwaterC, ksbod_20, 1.047) + ksbod_tc = arrhenius_correction(TwaterC, ksbod_20, ksbod_theta) return ksbod_tc @@ -2406,14 +2437,16 @@ def CBOD( def kpoc_tc( TwaterC: xr.DataArray, kpoc_20: xr.DataArray, + kpoc_theta: xr.DataArray ) -> xr.DataArray: """Calculate the temperature adjusted POC hydrolysis rate (/d) Args: TwaterC: Water temperature in Celsius kpoc_20: POC hydrolysis rate at 20 degrees Celsius (1/d) + kpoc_theta: Arrhenius coefficient for POC hydrolysis rate """ - return arrhenius_correction(TwaterC, kpoc_20, 1.047) + return arrhenius_correction(TwaterC, kpoc_20, kpoc_theta) @@ -2579,14 +2612,16 @@ def DOC_benthic_algae_mortality( def kdoc_tc( TwaterC: xr.DataArray, kdoc_20: xr.DataArray, + kdoc_theta: xr.DataArray ) -> xr.DataArray: """Calculate the temperature adjusted DOC oxidation rate (1/d) Args: TwaterC: Water temperature in Celsius kdoc_20: DOC oxidation rate at 20 degrees Celsius (1/d) + kdoc_theta: Arrhenius coefficient for DOC oxidation rate """ - return arrhenius_correction(TwaterC, kdoc_20, 1.047) + return arrhenius_correction(TwaterC, kdoc_20, kdoc_theta) def DOC_DIC_oxidation( @@ -3103,7 +3138,8 @@ def DOX( def kdx_tc( TwaterC : xr.DataArray, - kdx_20: xr.DataArray + kdx_20: xr.DataArray, + kdx_theta: xr.DataArray ) -> xr.DataArray : """Calculate kdx_tc: pathogen death rate (1/d). @@ -3111,9 +3147,10 @@ def kdx_tc( Args: TwaterC: Water temperature (C) kdx_20: Pathogen death rate at 20 degree (1/d) + kdx_theta: Arrhenius coefficient for pathogen death rate """ - return arrhenius_correction(TwaterC, kdx_20, 1.07) + return arrhenius_correction(TwaterC, kdx_20, kdx_theta) def PathogenDeath( diff --git a/src/clearwater_modules/nsm1/static_variables.py b/src/clearwater_modules/nsm1/static_variables.py index 1e91c7c..787faea 100644 --- a/src/clearwater_modules/nsm1/static_variables.py +++ b/src/clearwater_modules/nsm1/static_variables.py @@ -55,6 +55,174 @@ class Variable(base.Variable): use='static' ) +Variable( + name='kah_theta', + long_name='Arrhenius coefficient for hydraulic oxygen reaeration rate', + units='unitless', + description='Arrhenius coefficient for hydraulic oxygen reaeration rate', + use='static' +) + +Variable( + name='kaw_theta', + long_name='Arrhenius coefficient for wind oxygen reaeration velocity', + units='unitless', + description='Arrhenius coefficient for wind oxygen reaeration velocity', + use='static' +) + +Variable( + name='mu_max_theta', + long_name='Arrhenius coefficient for algal max growth rate', + units='unitless', + description='Arrhenius coefficient for algal max growth rate', + use='static' +) + +Variable( + name='krp_theta', + long_name='Arrhenius coefficient for algal respiration rate', + units='unitless', + description='Arrhenius coefficient for algal respiration rate', + use='static' +) + +Variable( + name='kdp_theta', + long_name='Arrhenius coefficient for algal death rate', + units='unitless', + description='Arrhenius coefficient for algal death rate', + use='static' +) + +Variable( + name='mub_max_theta', + long_name='Arrhenius coefficient for benthic algae max growth rate', + units='unitless', + description='Arrhenius coefficient for benthic algae max growth rate', + use='static' +) + +Variable( + name='krb_theta', + long_name='Arrhenius coefficient for benthic algae respiration rate', + units='unitless', + description='Arrhenius coefficient for benthic algae respiration rate', + use='static' +) + +Variable( + name='kdb_theta', + long_name='Arrhenius coefficient for benthic algae death rate', + units='unitless', + description='Arrhenius coefficient for benthic algae death rate', + use='static' +) + +Variable( + name='knit_theta', + long_name='Arrhenius coefficient for ammonia decay rate', + units='unitless', + description='Arrhenius coefficient for ammonia decay rate', + use='static' +) + +Variable( + name='rnh4_theta', + long_name='Arrhenius coefficient for rate of sediment release rate of NH4', + units='unitless', + description='Arrhenius coefficient for rate of sediment release rate of NH4', + use='static' +) + +Variable( + name='vno3_theta', + long_name='Arrhenius coefficient for sediment denitrification rate', + units='unitless', + description='Arrhenius coefficient for sediment denitrification rate', + use='static' +) + +Variable( + name='kon_theta', + long_name='Arrhenius coefficient for decay rate of OrgN', + units='unitless', + description='Arrhenius coefficient for decay rate of OrgN', + use='static' +) + +Variable( + name='kdnit_theta', + long_name='Arrhenius coefficient for denitrification rate', + units='unitless', + description='Arrhenius coefficient for denitrification rate', + use='static' +) + +Variable( + name='kop_theta', + long_name='Arrhenius coefficient for decay rate of organic P', + units='unitless', + description='Arrhenius coefficient for decay rate of organic P', + use='static' +) + +Variable( + name='rpo4_theta', + long_name='Arrhenius coefficient for sediment release rate of DIP', + units='unitless', + description='Arrhenius coefficient for sediment release rate of DIP', + use='static' +) + +Variable( + name='kpom_theta', + long_name='Arrhenius coefficient for POM dissolution rate', + units='unitless', + description='Arrhenius coefficient for POM dissolution rate', + use='static' +) + +Variable( + name='kbod_theta', + long_name='Arrhenius coefficient for CBOD oxidation rate', + units='unitless', + description='Arrhenius coefficient for CBOD oxidation rate', + use='static' +) + +Variable( + name='ksbod_theta', + long_name='Arrhenius coefficient for CBOD sedimentation rate', + units='unitless', + description='Arrhenius coefficient for CBOD sedimentation rate', + use='static' +) + +Variable( + name='kpoc_theta', + long_name='Arrhenius coefficient for POC hydrolysis rate', + units='unitless', + description='Arrhenius coefficient for POC hydrolysis rate', + use='static' +) + +Variable( + name='kdoc_theta', + long_name='Arrhenius coefficient for DOC oxidation rate', + units='unitless', + description='Arrhenius coefficient for DOX oxidation rate', + use='static' +) + +Variable( + name='kdx_theta', + long_name='Arrhenius coefficient for pathogen death rate', + units='unitless', + description='Arrhenius coefficient for pathogen death rate', + use='static' +) + Variable( name='fcom', long_name='Fraction of carbon in organic matter',