Skip to content

Commit

Permalink
Merge branch 'add_aggs_asm1' into bsm2_optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
adam-a-a committed Dec 8, 2023
2 parents 371b2f1 + 51e92e8 commit d5e5352
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 2 deletions.
76 changes: 76 additions & 0 deletions watertap/property_models/activated_sludge/asm1_properties.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,30 @@ def build(self):
doc="Reference temperature",
units=pyo.units.K,
)
#TODO: f_p exists on the rxn parameter block and duplicating here temporarily; consolidate
self.f_p = pyo.Var(
initialize=0.08,
units=pyo.units.dimensionless,
domain=pyo.PositiveReals,
doc="Fraction of biomass yielding particulate products, f_p",
)
self.f_p.fix()

#TODO: i_xb and i_xp exist on rxn param block, duplicating temporarily; consolidate later
self.i_xb = pyo.Var(
initialize=0.08,
units=pyo.units.dimensionless,
domain=pyo.PositiveReals,
doc="Mass fraction of N per COD in biomass, i_xb",
)
self.i_xp = pyo.Var(
initialize=0.06,
units=pyo.units.dimensionless,
domain=pyo.PositiveReals,
doc="Mass fraction of N per COD in particulates, i_xp",
)
self.i_xb.fix()
self.i_xp.fix()

@classmethod
def define_metadata(cls, obj):
Expand All @@ -139,6 +163,11 @@ def define_metadata(cls, obj):
obj.define_custom_properties(
{
"alkalinity": {"method": None},
"TSS": {"method": "_TSS"},
"BOD5": {"method": "_BOD5"},
"TKN": {"method": "_TKN"},
"Total_N": {"method": "_Total_N"},
"COD": {"method": "_COD"},
}
)
obj.add_default_units(
Expand Down Expand Up @@ -356,6 +385,53 @@ def energy_density_expression(self):
rule=energy_density_expression, doc="Energy density term"
)

def _TSS(self):
tss = self.conc_mass_comp["X_S"] + self.conc_mass_comp["X_I"] + self.conc_mass_comp["X_BH"] + self.conc_mass_comp["X_BA"] + self.conc_mass_comp["X_P"]
return 0.75*tss

self.TSS = pyo.Expression(
rule=_TSS,
doc="Total suspended solids (TSS)",
)

def _BOD5(self):
bod5 = self.conc_mass_comp["X_S"] + self.conc_mass_comp["X_S"] + (1-self.params.f_p)*(self.conc_mass_comp["X_BH"] + self.conc_mass_comp["X_BA"])
#TODO: 0.25 should be a parameter instead as it changes by influent/effluent
return 0.25*bod5

self.BOD5 = pyo.Expression(
rule=_BOD5,
doc="Five-day Biological Oxygen Demand (BOD5)",
)

def _COD(self):
cod = self.conc_mass_comp["S_S"] + self.conc_mass_comp["S_I"] + self.conc_mass_comp["X_S"] + self.conc_mass_comp["X_S"] + self.conc_mass_comp["X_I"] + self.conc_mass_comp["X_BH"] + self.conc_mass_comp["X_BA"]+ self.conc_mass_comp["X_P"]
return cod

self.COD = pyo.Expression(
rule=_COD,
doc="Chemical Oxygen Demand",
)

def _TKN(self):
tkn = self.conc_mass_comp["S_NH"] + self.conc_mass_comp["S_ND"] + self.conc_mass_comp["X_ND"] + self.params.i_xb * (self.conc_mass_comp["X_BH"] + self.conc_mass_comp["X_BA"]) + self.params.i_xp * (self.conc_mass_comp["X_P"] + self.conc_mass_comp["X_I"])
return tkn

self.TKN = pyo.Expression(
rule=_TKN,
doc="Total Kjeldahl Nitrogen",
)

def _Total_N(self):
totaln = self.TKN + self.conc_mass_comp["S_NO"]
return totaln

self.Total_N = pyo.Expression(
rule=_Total_N,
doc="Total Nitrogen",
)


iscale.set_scaling_factor(self.flow_vol, 1e1)
iscale.set_scaling_factor(self.temperature, 1e-1)
iscale.set_scaling_factor(self.pressure, 1e-6)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@


# Some more information about this module
__author__ = "Andrew Lee, Xinhong Liu"
__author__ = "Andrew Lee, Xinhong Liu, Adam Atia"


# Set up logger
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#################################################################################
"""
Tests for ASM1 thermo property package.
Authors: Andrew Lee
Authors: Andrew Lee, Adam Atia
"""

import pytest
Expand Down Expand Up @@ -320,3 +320,11 @@ def test_initialize(self, model):
@pytest.mark.unit
def check_units(self, model):
assert_units_consistent(model)

@pytest.mark.unit
def test_expressions(self, model):
assert value(model.props[1].TSS) == 0.375
assert value(model.props[1].COD) == pytest.approx(0.7999, rel=1e-3)
assert value(model.props[1].BOD5) == 0.096
assert value(model.props[1].TKN) == pytest.approx(0.328, rel=1e-3)
assert value(model.props[1].Total_N) == pytest.approx(0.428, rel=1e-3)

0 comments on commit d5e5352

Please sign in to comment.