From 6c7cf7dbf8b547b21e91a544f3fa5e208f45ec01 Mon Sep 17 00:00:00 2001 From: Isaac Mudge <66634423+imscw95@users.noreply.github.com> Date: Tue, 25 Jun 2024 11:16:14 -0500 Subject: [PATCH] Finished alkalinity tests --- .../dev_sandbox/model_architecture_nsm.ipynb | 376 +-- src/clearwater_modules/nsm1/processes.py | 31 +- tests/test_12_nsm_alkalinity_calculations.py | 2658 +++++++++++++++++ 3 files changed, 2865 insertions(+), 200 deletions(-) create mode 100644 tests/test_12_nsm_alkalinity_calculations.py diff --git a/examples/dev_sandbox/model_architecture_nsm.ipynb b/examples/dev_sandbox/model_architecture_nsm.ipynb index 92a1bec..ecf6b55 100644 --- a/examples/dev_sandbox/model_architecture_nsm.ipynb +++ b/examples/dev_sandbox/model_architecture_nsm.ipynb @@ -602,357 +602,357 @@ " * x (x) float64 1.0\n", " * y (y) float64 1.0\n", "Data variables: (12/281)\n", - " Ap (year, x, y) float64 36.77 58.28\n", - " Ab (year, x, y) float64 24.0 9.954\n", - " NH4 (year, x, y) float64 0.5 0.8985\n", - " NO3 (year, x, y) float64 5.54 5.299\n", + " Ap (year, x, y) float64 36.77 58.26\n", + " Ab (year, x, y) float64 24.0 9.951\n", + " NH4 (year, x, y) float64 0.063 0.557\n", + " NO3 (year, x, y) float64 5.54 5.203\n", " OrgN (year, x, y) float64 1.726 1.726\n", " N2 (year, x, y) float64 1.0 1.895e+04\n", " ... ...\n", - " dAlkdt (year, x, y) float64 nan 0.0006381\n", + " dAlkdt (year, x, y) float64 nan 2.315\n", " KHN2_tc (year, x, y) float64 nan 0.0006499\n", " P_wv (year, x, y) float64 nan 0.03128\n", " N2sat (year, x, y) float64 nan 1.457e+04\n", " dN2dt (year, x, y) float64 nan 1.895e+04\n", - " TDG (year, x, y) float64 nan 123.1
  • " ], "text/plain": [ "\n", @@ -962,19 +962,19 @@ " * x (x) float64 1.0\n", " * y (y) float64 1.0\n", "Data variables: (12/281)\n", - " Ap (year, x, y) float64 36.77 58.28\n", - " Ab (year, x, y) float64 24.0 9.954\n", - " NH4 (year, x, y) float64 0.5 0.8985\n", - " NO3 (year, x, y) float64 5.54 5.299\n", + " Ap (year, x, y) float64 36.77 58.26\n", + " Ab (year, x, y) float64 24.0 9.951\n", + " NH4 (year, x, y) float64 0.063 0.557\n", + " NO3 (year, x, y) float64 5.54 5.203\n", " OrgN (year, x, y) float64 1.726 1.726\n", " N2 (year, x, y) float64 1.0 1.895e+04\n", " ... ...\n", - " dAlkdt (year, x, y) float64 nan 0.0006381\n", + " dAlkdt (year, x, y) float64 nan 2.315\n", " KHN2_tc (year, x, y) float64 nan 0.0006499\n", " P_wv (year, x, y) float64 nan 0.03128\n", " N2sat (year, x, y) float64 nan 1.457e+04\n", " dN2dt (year, x, y) float64 nan 1.895e+04\n", - " TDG (year, x, y) float64 nan 123.1" + " TDG (year, x, y) float64 nan 105.3" ] }, "execution_count": 2, @@ -996,7 +996,7 @@ "\n", "initial_state_values = {'Ap': 36.77,\n", " 'Ab': 24,\n", - " 'NH4': 0.5,\n", + " 'NH4': 0.063,\n", " 'NO3': 5.54,\n", " 'OrgN': 1.726,\n", " 'N2': 1,\n", @@ -1007,7 +1007,7 @@ " 'DIC': 1,\n", " 'POM': 1,\n", " 'CBOD': 1,\n", - " 'DOX': 8,\n", + " 'DOX': 1,\n", " 'PX': 1,\n", " 'Alk': 1}\n", "\n", @@ -1040,7 +1040,7 @@ " 'KsPb': 0.125,\n", " 'Ksb': 10,\n", " 'mub_max_20': 0.4,\n", - " 'krb_20': .2,\n", + " 'krb_20': 0.2,\n", " 'kdb_20': 0.3,\n", " 'b_growth_rate_option': 1,\n", " 'b_light_limitation_option': 1,\n", @@ -1049,7 +1049,7 @@ "}\n", "\n", "nitrogen_parameters = {\n", - " 'KNR': 10,\n", + " 'KNR': 0.6,\n", " 'knit_20': 0.1,\n", " 'kon_20': 0.1,\n", " 'kdnit_20': 0.002,\n", @@ -1113,11 +1113,11 @@ " 'use_Algae': True,\n", " 'use_Balgae': True,\n", " 'use_POC': False,\n", - " 'use_DOC': True,\n", - " 'use_DIC': True,\n", + " 'use_DOC': False,\n", + " 'use_DIC': False,\n", " 'use_N2': False,\n", " 'use_Pathogen': False,\n", - " 'use_Alk': False,\n", + " 'use_Alk': True,\n", " 'use_POM': False \n", "}\n", "\n", diff --git a/src/clearwater_modules/nsm1/processes.py b/src/clearwater_modules/nsm1/processes.py index f0cdf3c..4cdb3d7 100644 --- a/src/clearwater_modules/nsm1/processes.py +++ b/src/clearwater_modules/nsm1/processes.py @@ -1125,7 +1125,7 @@ def knit_tc( knit_20: Nitrification rate ammonia decay (1/d) """ - return arrhenius_correction(TwaterC, knit_20, 1.083) + return arrhenius_correction(TwaterC, knit_20, 1.047) @@ -1185,7 +1185,7 @@ def kdnit_tc( kdnit_20: Denitrification rate (1/d) """ - return arrhenius_correction(TwaterC, kdnit_20, 1.045) + return arrhenius_correction(TwaterC, kdnit_20, 1.047) def ApUptakeFr_NH4( @@ -1436,7 +1436,7 @@ def NH4_Nitrification( NH4: Ammonium concentration (mg-N/L), """ - return xr.where(use_NH4,NitrificationInhibition * knit_tc * NH4,0) + return xr.where(use_NH4, NitrificationInhibition * knit_tc * NH4, 0) def NH4fromBed( @@ -3232,8 +3232,8 @@ def Alk_denitrification( ], choicelist = [ - r_alkden * (1.0 - (DOX / (DOX + KsOxdn))) * kdnit_tc * NO3, - r_alkden * kdnit_tc * NO3 + r_alkden * (1.0 - (DOX / (DOX + KsOxdn))) * kdnit_tc * NO3 * 50000, + r_alkden * kdnit_tc * NO3 * 50000 ], default = 0 @@ -3270,8 +3270,8 @@ def Alk_nitrification( ], choicelist = [ - r_alkn * (1 - np.exp(-KNR * DOX)) * knit_tc * NH4, - knit_tc * NH4 + r_alkn * (1 - np.exp(-KNR * DOX)) * knit_tc * NH4 * 50000, + knit_tc * NH4 * 50000 ], default = 0 @@ -3285,6 +3285,7 @@ def Alk_algal_growth( r_alkaa: xr.DataArray, r_alkan: xr.DataArray, ApUptakeFr_NH4 : xr.DataArray, + rca: xr.DataArray, use_Algae: xr.DataArray ) -> xr.DataArray: """Calculate the alkalinity concentration change due to algal growth @@ -3294,9 +3295,10 @@ def Alk_algal_growth( r_alkaa: Ratio translating algal growth into Alk if NH4 is the N source (eq/ug-Chla) r_alkan: Ratio translating algal growth into Alk if NO3 is the N source (eq/ug-Chla) ApUptakeFr_NH4 : Preference fraction of algal N uptake from NH4 + rca: Algal C:Chla Ratio use_Algae: Option to use algae """ - da: xr.DataArray = xr.where(use_Algae == True, (r_alkaa * ApUptakeFr_NH4 - r_alkan * (1 - ApUptakeFr_NH4 )) * ApGrowth, 0) + da: xr.DataArray = xr.where(use_Algae == True, (r_alkaa * ApUptakeFr_NH4 - r_alkan * (1 - ApUptakeFr_NH4 )) * ApGrowth * rca * 50000, 0) return da @@ -3304,6 +3306,7 @@ def Alk_algal_growth( def Alk_algal_respiration( ApRespiration: xr.DataArray, r_alkaa: xr.DataArray, + rca: xr.DataArray, use_Algae: xr.DataArray ) -> xr.DataArray: """Calculate the alkalinity concentration change due to algal respiration @@ -3311,9 +3314,10 @@ def Alk_algal_respiration( Args: ApRespiration: Algae respiration calculated in algae module (ug-Chla/L/d) r_alkaa: Ratio translating algal growth into Alk if NH4 is the N source (eq/ug-Chla) + rca: Algal C:Chla Ratio use_Algae: Option to use algae """ - da: xr.DataArray = xr.where(use_Algae == True, ApRespiration * r_alkaa, 0) + da: xr.DataArray = xr.where(use_Algae == True, ApRespiration * r_alkaa * 50000 * rca, 0) return da @@ -3325,6 +3329,7 @@ def Alk_benthic_algae_growth( r_alkbn: xr.DataArray, AbUptakeFr_NH4 : xr.DataArray, Fb: xr.DataArray, + rcb: xr.DataArray, use_Balgae: xr.DataArray ) -> xr.DataArray: """Calculate the alkalinity concentration change due to algal growth @@ -3336,9 +3341,10 @@ def Alk_benthic_algae_growth( r_alkan: Ratio translating algal growth into Alk if NO3 is the N source (eq/ug-Chla) AbUptakeFr_NH4 : Preference fraction of benthic algae N uptake from NH4 Fb: Fraction of bottom area available for benthic algae growth + rcb: Ratio benthic algae carbon to dry weight use_Balgae: Option to use benthic algae """ - da: xr.DataArray = xr.where(use_Balgae == True, (1 / depth) *(r_alkba * AbUptakeFr_NH4 - r_alkbn * (1 - AbUptakeFr_NH4 )) * AbGrowth * Fb, 0) + da: xr.DataArray = xr.where(use_Balgae == True, (1 / depth) * (r_alkba * AbUptakeFr_NH4 - r_alkbn * (1 - AbUptakeFr_NH4 )) * AbGrowth * Fb * rcb * 50000, 0) return da @@ -3348,6 +3354,7 @@ def Alk_benthic_algae_respiration( depth: xr.DataArray, r_alkba: xr.DataArray, Fb: xr.DataArray, + rcb: xr.DataArray, use_Balgae: xr.DataArray ) -> xr.DataArray: """Calculate the alkalinity concentration change due to algal respiration @@ -3356,14 +3363,14 @@ def Alk_benthic_algae_respiration( ApRespiration: Algae respiration calculated in algae module (ug-Chla/L/d) r_alkaa: Ratio translating algal growth into Alk if NH4 is the N source (eq/ug-Chla) Fb: Fraction of bottom area available for benthic algae growth + rcb: Ratio benthic algae carbon to dry weight use_Balgae: Option to use betnhic algae """ - da: xr.DataArray = xr.where(use_Balgae == True, (1 / depth) * r_alkba * AbRespiration * Fb, 0) + da: xr.DataArray = xr.where(use_Balgae == True, (1 / depth) * r_alkba * AbRespiration * rcb * Fb * 50000, 0) return da - def dAlkdt( Alk_denitrification: xr.DataArray, Alk_nitrification: xr.DataArray, diff --git a/tests/test_12_nsm_alkalinity_calculations.py b/tests/test_12_nsm_alkalinity_calculations.py new file mode 100644 index 0000000..b1cf0a9 --- /dev/null +++ b/tests/test_12_nsm_alkalinity_calculations.py @@ -0,0 +1,2658 @@ +from numba import ( + types, + typed, +) +import pytest + +from clearwater_modules.nsm1 import NutrientBudget +from clearwater_modules.nsm1.constants import ( + AlgaeStaticVariables, + AlkalinityStaticVariables, + BalgaeStaticVariables, + NitrogenStaticVariables, + CarbonStaticVariables, + CBODStaticVariables, + DOXStaticVariables, + N2StaticVariables, + POMStaticVariables, + PathogenStaticVariables, + PhosphorusStaticVariables, + GlobalParameters, + GlobalVars +) + + +@pytest.fixture(scope='function') +def initial_nsm1_state() -> dict[str, float]: + """Return initial state values for the model.""" + return { 'Ap': 36.77, + 'Ab': 24, + 'NH4': .063, + 'NO3': 5.54, + 'OrgN': 1.726, + 'N2': 1, + 'TIP': 0.071, + 'OrgP': 0.24, + 'POC': 4.356, + 'DOC': 1, + 'DIC': 1, + 'POM': 1, + 'CBOD': 1, + 'DOX': 8, + 'PX': 1, + 'Alk': 1} + +@pytest.fixture(scope='module') +def time_steps() -> int: + return 1 + +@pytest.fixture(scope='function') +def default_algae_params() -> AlgaeStaticVariables: + """Returns default algae static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return AlgaeStaticVariables( + AWd = 100, + AWc= 40, + AWn= 7.2, + AWp= 1, + AWa= 1000, + KL= 10, + KsN= 0.04, + KsP= 0.0012, + mu_max_20= 1, + kdp_20= 0.15, + krp_20= 0.2, + vsap= 0.15, + growth_rate_option = 1, + light_limitation_option = 1, + ) + +@pytest.fixture(scope='function') +def default_alkalinity_params() -> AlkalinityStaticVariables: + """Returns default alkalinity static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return AlkalinityStaticVariables( + r_alkaa = 14.0 / 106.0 / 12.0 / 1000.0, + r_alkan = 18.0 / 106.0 / 12.0 / 1000.0, + r_alkn = 2.0 / 14.0 / 1000.0, + r_alkden = 4.0 / 14.0 / 1000.0, + r_alkba = 14.0 / 106.0 / 12.0 / 1000.0, + r_alkbn = 18.0 / 106.0 / 12.0 / 1000.0 + ) + +@pytest.fixture(scope='function') +def default_balgae_params() -> BalgaeStaticVariables: + """Returns default Benthic Algae static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return BalgaeStaticVariables( + BWd = 100, + BWc = 40, + BWn = 7.2, + BWp = 1, + BWa = 5000, + KLb = 10, + KsNb= 0.25, + KsPb=0.125, + Ksb=10, + mub_max_20=0.4, + krb_20=0.2, + kdb_20=0.3, + b_growth_rate_option=1, + b_light_limitation_option=1, + Fw=0.9, + Fb=0.9 + ) + +@pytest.fixture(scope='function') +def default_nitrogen_params() -> NitrogenStaticVariables: + """Returns default nitrogen static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return NitrogenStaticVariables( + KNR= 10, + knit_20= 0.1, + kon_20=0.1, + kdnit_20=0.002, + rnh4_20=0, + vno3_20=0, + KsOxdn=0.1, + PN=0.5, + PNb=0.5 + ) + +@pytest.fixture(scope='function') +def default_carbon_params() -> CarbonStaticVariables: + """Returns default carbon static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return CarbonStaticVariables( + f_pocp = 0.9, + kdoc_20= 0.01, + f_pocb= 0.9, + kpoc_20= 0.005, + KsOxmc=1.0, + pCO2 = 383.0, + FCO2 = 0.2, + roc = 32.0/12.0 + ) + +@pytest.fixture(scope='function') +def default_CBOD_params() -> CBODStaticVariables: + """Returns default CBOD static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return CBODStaticVariables( + KsOxbod = 0.5, + kbod_20 = 0.12, + ksbod_20 = 0.0 + ) + +@pytest.fixture(scope='function') +def default_DOX_params() -> DOXStaticVariables: + """Returns default DOX static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return DOXStaticVariables( + ron = 2.0 * 32.0 / 14.0, + KsSOD = 1, + ) + +@pytest.fixture(scope='function') +def default_N2_params() -> N2StaticVariables: + """Returns default N2 static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return N2StaticVariables( + + ) + +@pytest.fixture(scope='function') +def default_POM_params() -> POMStaticVariables: + """Returns default POM static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return POMStaticVariables( + kpom_20 = 0.1 + ) + +@pytest.fixture(scope='function') +def default_pathogen_params() -> PathogenStaticVariables: + """Returns default Pathogens static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return PathogenStaticVariables( + kdx_20=0.8, + apx=1, + vx=1 + ) + +@pytest.fixture(scope='function') +def default_phosphorus_params() -> PhosphorusStaticVariables: + """Returns default phosphorus static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return PhosphorusStaticVariables( + kop_20 = 0.1, + rpo4_20 = 0, + kdpo4 = 100.0, + ) + +@pytest.fixture(scope='function') +def default_gp_params() -> GlobalParameters: + """Returns default global parameter static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return GlobalParameters( + use_NH4= True, + use_NO3= True, + use_OrgN= False, + use_OrgP = False, + use_TIP= True, + use_SedFlux= False, + use_DOX= True, + use_Algae= True, + use_Balgae= True, + use_POC = False, + use_DOC = False, + use_DIC= False, + use_N2 = False, + use_Pathogen = False, + use_Alk = True, + use_POM = False + ) + +@pytest.fixture(scope='function') +def default_gvars_params() -> GlobalVars: + """Returns default global variables static variable values for the model. + + NOTE: As of now (3/18/2022) these match the built in defaults, but are + copied here to allow for easy modification of the defaults in the future. + + Returns a typed dictionary, with string keys and float values. + """ + return GlobalVars( + vson = 0.01, + vsoc = 0.01, + vsop = 0.01, + vs = 0.01, + SOD_20 = 0.5, + SOD_theta = 1.047, + vb = 0.01, + fcom = 0.4, + kaw_20_user = 0, + kah_20_user = 1, + hydraulic_reaeration_option = 1, + wind_reaeration_option = 1, + dt = 1, #TODO Dynamic or static? + depth = 1.5, #TODO Dynamic or static? + TwaterC = 25, + theta = 1.047, + velocity = 1, + flow = 150, + topwidth = 100, + slope = 0.0002, + shear_velocity = 0.05334, + pressure_atm = 1013.25, + wind_speed = 3, + q_solar = 500, + Solid = 1, + lambda0 = 0.02, + lambda1 = 0.0088, + lambda2 = 0.054, + lambdas = 0.056, + lambdam = 0.174, + Fr_PAR = .47 + ) + +def get_nutrient_budget_instance( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + +) -> NutrientBudget: + """Return an instance of the NSM1 class.""" + return NutrientBudget( + time_steps=time_steps, + initial_state_values=initial_nsm1_state, + algae_parameters=default_algae_params, + alkalinity_parameters=default_alkalinity_params, + balgae_parameters=default_balgae_params, + nitrogen_parameters=default_nitrogen_params, + carbon_parameters=default_carbon_params, + CBOD_parameters=default_CBOD_params, + DOX_parameters=default_DOX_params, + N2_parameters=default_N2_params, + POM_parameters=default_POM_params, + pathogen_parameters=default_pathogen_params, + phosphorus_parameters=default_phosphorus_params, + global_parameters=default_gp_params, + global_vars=default_gvars_params, + time_dim='nsm1_time_step', + ) + +@pytest.fixture(scope='module') +def tolerance() -> float: + """Controls the precision of the pytest.approx() function.""" + return 0.01 + +def test_defaults( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.27 + +def test_defaults( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.27 + +def test_changed_Ap( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_state_dict = initial_nsm1_state + initial_state_dict['Ap'] = 10 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.31 + +def test_changed_Ab( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_state_dict = initial_nsm1_state + initial_state_dict['Ab'] = 10 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.75 + +def test_changed_Alk( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_state_dict = initial_nsm1_state + initial_state_dict['Alk'] = 5 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 7.27 + +def test_changed_NH4( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_state_dict = initial_nsm1_state + initial_state_dict['NH4'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.10 + +def test_changed_TIP( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_state_dict = initial_nsm1_state + initial_state_dict['TIP'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.54 + +def test_changed_DOX( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_state_dict = initial_nsm1_state + initial_state_dict['DOX'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.32 + +def test_changed_NO3( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_state_dict = initial_nsm1_state + initial_state_dict['NO3'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.10 + +def test_changed_TwaterC( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_gvars_dict = default_gvars_params + initial_gvars_dict['TwaterC'] = 15 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.43 + +def test_changed_q_solar( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_gvars_dict = default_gvars_params + initial_gvars_dict['q_solar'] = 250 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.16 + +def test_changed_KL( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['KL'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.36 + +def test_changed_KLb( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['KLb'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.30 + +def test_changed_lambda0( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_gvars_dict = default_gvars_params + initial_gvars_dict['lambda0'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.09 + +def test_changed_lambda1( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_gvars_dict = default_gvars_params + initial_gvars_dict['lambda1'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.02 + +def test_changed_lambda2( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_gvars_dict = default_gvars_params + initial_gvars_dict['lambda2'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.18 + +def test_changed_KsN( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['KsN'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.10 + +def test_changed_KsP( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['KsP'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.20 + +def test_changed_KsNb( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['KsNb'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.25 + +def test_changed_KsPb( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['KsPb'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.13 + +def test_changed_light_limitation_option( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['light_limitation_option'] = 2 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.37 + +def test_changed_b_light_limitation_option( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['b_light_limitation_option'] = 2 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.30 + +def test_changed_Fb( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['Fb'] = 0.5 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.84 + +def test_changed_Ksb( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['Ksb'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.12 + +def test_changed_AWa( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['AWa'] = 100 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 15.43 + +def test_changed_AWc( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['AWc'] = 20 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.59 + +def test_changed_AWd( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['AWd'] = 50 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.27 + +def test_changed_AWp( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['AWp'] = 0.1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.27 + +def test_changed_AWn( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['AWn'] = 0.1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.27 + +def test_changed_BWd( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['BWd'] = 50 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 4.24 + +def test_changed_BWc( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['BWc'] = 10 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.54 + +def test_changed_BWn( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['BWn'] = 0.1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.27 + +def test_changed_BWp( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['BWp'] = 0.1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.27 + +def test_changed_BWa( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['BWa'] = 1000 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.27 + +def test_changed_depth( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_gvars_dict = default_gvars_params + initial_gvars_dict['depth'] = 5 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.20 + +def test_changed_mu_max_20( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['mu_max_20'] = 0.2 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.35 + +def test_changed_mub_max_20( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['mub_max_20'] = 1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.53 + +def test_changed_PN( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_nitrogen_dict = default_nitrogen_params + initial_nitrogen_dict['PN'] = 0.9 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.10 + +def test_changed_PNb( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_nitrogen_dict = default_nitrogen_params + initial_nitrogen_dict['PNb'] = 0.9 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.24 + +def test_changed_PNb( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['PNb'] = 0.9 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.24 + +def test_changed_knit_20( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_nitrogen_dict = default_nitrogen_params + initial_nitrogen_dict['knit_20'] = 0.01 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.31 + +def test_changed_KsOxdn( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_nitrogen_dict = default_nitrogen_params + initial_nitrogen_dict['KsOxdn'] = 0.01 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.27 + +def test_changed_kdnit_20( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_nitrogen_dict = default_nitrogen_params + initial_nitrogen_dict['kdnit_20'] = 0.1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.40 + +def test_changed_kdnit_20( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_nitrogen_dict = default_nitrogen_params + initial_nitrogen_dict['kdnit_20'] = 0.1 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.40 + +def test_changed_krp_20( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['krp_20'] = 0.01 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.08 + +def test_changed_krp_20( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_algae_dict = default_algae_params + initial_algae_dict['krp_20'] = 0.01 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 3.08 + +def test_changed_krb_20( + time_steps, + initial_nsm1_state, + default_algae_params, + default_alkalinity_params, + default_balgae_params, + default_nitrogen_params, + default_carbon_params, + default_CBOD_params, + default_DOX_params, + default_N2_params, + default_POM_params, + default_pathogen_params, + default_phosphorus_params, + default_gp_params, + default_gvars_params, + tolerance, +) -> None: + """Test the model with default parameters.""" + # alter parameters as necessary + initial_balgae_dict = default_balgae_params + initial_balgae_dict['krb_20'] = 0.01 + + # instantiate the model + nsm1: NutrientBudget = get_nutrient_budget_instance( + time_steps=time_steps, + initial_nsm1_state=initial_nsm1_state, + default_algae_params=default_algae_params, + default_alkalinity_params=default_alkalinity_params, + default_balgae_params=default_balgae_params, + default_nitrogen_params=default_nitrogen_params, + default_carbon_params=default_carbon_params, + default_CBOD_params=default_CBOD_params, + default_DOX_params=default_DOX_params, + default_N2_params=default_N2_params, + default_POM_params=default_POM_params, + default_pathogen_params=default_pathogen_params, + default_phosphorus_params=default_phosphorus_params, + default_gp_params=default_gp_params, + default_gvars_params=default_gvars_params + ) + + # Run the model + nsm1.increment_timestep() + Alk = nsm1.dataset.isel(nsm1_time_step=-1).Alk.values.item() + + assert isinstance(Alk, float) + assert pytest.approx(Alk, tolerance) == 2.51 \ No newline at end of file