From faef24fc72d0068ba2fc6d2725b95518a64c2b2b Mon Sep 17 00:00:00 2001 From: Yalin Date: Sun, 15 Oct 2023 14:50:57 -0400 Subject: [PATCH 1/7] allow `bsm1` to be created with `asm2d` (untested) --- exposan/bsm1/README.rst | 2 +- ...ions.xlsx => initial_conditions_asm1.xlsx} | Bin .../bsm1/data/initial_conditions_asm2d.xlsx | Bin 0 -> 22316 bytes ...ta.xlsx => matlab_exported_data_asm1.xlsx} | Bin ...ce.mat => matlab_saved_workspace_asm1.mat} | Bin exposan/bsm1/model.py | 9 +- exposan/bsm1/system.py | 125 ++++++++++++++---- 7 files changed, 107 insertions(+), 29 deletions(-) rename exposan/bsm1/data/{initial_conditions.xlsx => initial_conditions_asm1.xlsx} (100%) create mode 100644 exposan/bsm1/data/initial_conditions_asm2d.xlsx rename exposan/bsm1/data/{matlab_exported_data.xlsx => matlab_exported_data_asm1.xlsx} (100%) rename exposan/bsm1/data/{matlab_saved_workspace.mat => matlab_saved_workspace_asm1.mat} (100%) diff --git a/exposan/bsm1/README.rst b/exposan/bsm1/README.rst index 59c8a15e..78c32634 100644 --- a/exposan/bsm1/README.rst +++ b/exposan/bsm1/README.rst @@ -4,7 +4,7 @@ bsm1: Benchmark Simulation Model No. 1 Summary ------- -This module implements the Benchmark Simulation Model No. 1 (BSM1). [1]_ The code for process modeling and dynamic simulation has been verified against the MATLAB/Simulink [2]_ implementation developed by International Water Association (IWA) Task Group on Benchmarking of Control Strategies. The ``data`` folder contains the outputs from MATLAB/Simulink results (``matlab_exported_data.xlsx`` and ``matlab_workspace.mat``) for comparison. +This module implements the Benchmark Simulation Model No. 1 (BSM1). [1]_ The code for process modeling and dynamic simulation has been verified against the MATLAB/Simulink [2]_ implementation developed by International Water Association (IWA) Task Group on Benchmarking of Control Strategies. The ``data`` folder contains the outputs from MATLAB/Simulink results (``matlab_exported_data_asm1.xlsx`` and ``matlab_workspace_asm1.mat``) for comparison. .. figure:: ./readme_figures/bsm1.png diff --git a/exposan/bsm1/data/initial_conditions.xlsx b/exposan/bsm1/data/initial_conditions_asm1.xlsx similarity index 100% rename from exposan/bsm1/data/initial_conditions.xlsx rename to exposan/bsm1/data/initial_conditions_asm1.xlsx diff --git a/exposan/bsm1/data/initial_conditions_asm2d.xlsx b/exposan/bsm1/data/initial_conditions_asm2d.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b444171dd1eb1bd9ad473571b8950d58904dfb23 GIT binary patch literal 22316 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 literal 0 HcmV?d00001 diff --git a/exposan/bsm1/data/matlab_exported_data.xlsx b/exposan/bsm1/data/matlab_exported_data_asm1.xlsx similarity index 100% rename from exposan/bsm1/data/matlab_exported_data.xlsx rename to exposan/bsm1/data/matlab_exported_data_asm1.xlsx diff --git a/exposan/bsm1/data/matlab_saved_workspace.mat b/exposan/bsm1/data/matlab_saved_workspace_asm1.mat similarity index 100% rename from exposan/bsm1/data/matlab_saved_workspace.mat rename to exposan/bsm1/data/matlab_saved_workspace_asm1.mat diff --git a/exposan/bsm1/model.py b/exposan/bsm1/model.py index af2bd960..002e8435 100644 --- a/exposan/bsm1/model.py +++ b/exposan/bsm1/model.py @@ -15,17 +15,22 @@ from warnings import warn from chaospy import distributions as shape from qsdsan.utils import DictAttrSetter, AttrGetter, FuncGetter, \ - get_SRT as srt, time_printer + load_data, get_SRT as srt, time_printer from exposan.bsm1 import ( biomass_IDs, create_system, - default_init_conds as _ic, + data_path, results_path, Q, Q_was, V_an, V_ae, ) __all__ = ('create_model', 'run_uncertainty', 'run_wdiff_init',) +# Default init condition +path = os.path.join(data_path, 'initial_conditions_asm1.xlsx') +df = load_data(path, sheet='default') +_ic = df.to_dict('index') + #%% diff --git a/exposan/bsm1/system.py b/exposan/bsm1/system.py index f463d19c..5234a85a 100644 --- a/exposan/bsm1/system.py +++ b/exposan/bsm1/system.py @@ -21,7 +21,8 @@ __all__ = ( 'biomass_IDs', 'create_system', - 'default_asm_kwargs', 'default_inf_kwargs', 'default_init_conds', + 'default_asm1_kwargs', 'default_asm2d_kwargs', + 'default_asm1_inf_kwargs', 'default_asm2d_inf_kwargs', 'Q', 'Q_ras', 'Q_was', 'Temp', 'V_an', 'V_ae', ) @@ -47,7 +48,7 @@ # aer.B = 1750.286 # aer.C = 235.0 -default_inf_kwargs = { +default_asm1_inf_kwargs = { 'concentrations': { 'S_S':69.5, 'X_BH':28.17, @@ -62,7 +63,28 @@ 'units': ('m3/d', 'mg/L'), } -default_asm_kwargs = dict( +default_asm2d_inf_kwargs = { + 'concentrations': { + 'S_I': 14, + 'X_I': 26.5, + 'S_F': 20.1, + 'S_A': 94.3, + 'X_S': 409.75, + 'S_NH4': 31, + 'S_N2': 0, + 'S_NO3': 0.266, + 'S_PO4': 2.8, + 'X_PP': 0.05, + 'X_PHA': 0.5, + 'X_H': 0.15, + 'X_AUT': 0, + 'X_PAO': 0, + 'S_ALK':7*12, + }, + 'units': ('m3/d', 'mg/L'), + } + +default_asm1_kwargs = dict( Y_A=0.24, Y_H=0.67, f_P=0.08, i_XB=0.08, i_XP=0.06, mu_H=4.0, K_S=10.0, K_O_H=0.2, K_NO=0.5, b_H=0.3, eta_g=0.8, eta_h=0.8, k_h=3.0, K_X=0.1, mu_A=0.5, @@ -70,20 +92,38 @@ path=os.path.join(data_path, '_asm1.tsv'), ) -default_init_conds = { - 'S_S':5, - 'X_I':1000, - 'X_S':100, - 'X_BH':500, - 'X_BA':100, - 'X_P':100, - 'S_O':2, - 'S_NO':20, - 'S_NH':2, - 'S_ND':1, - 'X_ND':1, - 'S_ALK':7*12, - } +default_asm2d_kwargs = dict(iN_SI=0.01, iN_SF=0.03, iN_XI=0.02, iN_XS=0.04, iN_BM=0.07, + iP_SI=0.0, iP_SF=0.01, iP_XI=0.01, iP_XS=0.01, iP_BM=0.02, + iTSS_XI=0.75, iTSS_XS=0.75, iTSS_BM=0.9, + f_SI=0.0, Y_H=0.625, f_XI_H=0.1, + Y_PAO=0.625, Y_PO4=0.4, Y_PHA=0.2, f_XI_PAO=0.1, + Y_A=0.24, f_XI_AUT=0.1, + K_h=3.0, eta_NO3=0.6, eta_fe=0.4, K_O2=0.2, K_NO3=0.5, K_X=0.1, + mu_H=6.0, q_fe=3.0, eta_NO3_H=0.8, b_H=0.4, K_O2_H=0.2, K_F=4.0, + K_fe=4.0, K_A_H=4.0, K_NO3_H=0.5, K_NH4_H=0.05, K_P_H=0.01, K_ALK_H=0.1, + q_PHA=3.0, q_PP=1.5, mu_PAO=1.0, eta_NO3_PAO=0.6, b_PAO=0.2, b_PP=0.2, + b_PHA=0.2, K_O2_PAO=0.2, K_NO3_PAO=0.5, K_A_PAO=4.0, K_NH4_PAO=0.05, + K_PS=0.2, K_P_PAO=0.01, K_ALK_PAO=0.1, + K_PP=0.01, K_MAX=0.34, K_IPP=0.02, K_PHA=0.01, + mu_AUT=1.0, b_AUT=0.15, K_O2_AUT=0.5, K_NH4_AUT=1.0, K_ALK_AUT=0.5, K_P_AUT=0.01, + k_PRE=1.0, k_RED=0.6, K_ALK_PRE=0.5, + ) + +# # Replaced by `batch_init` +# default_asm1_init_conds = { +# 'S_S':5, +# 'X_I':1000, +# 'X_S':100, +# 'X_BH':500, +# 'X_BA':100, +# 'X_P':100, +# 'S_O':2, +# 'S_NO':20, +# 'S_NH':2, +# 'S_ND':1, +# 'X_ND':1, +# 'S_ALK':7*12, +# } def batch_init(sys, path, sheet): df = load_data(path, sheet) @@ -105,13 +145,46 @@ def batch_init(sys, path, sheet): # Benchmark Simulation Model No. 1 # ============================================================================= -def create_system(flowsheet=None, inf_kwargs={}, asm_kwargs={}, init_conds={}, +def create_system(flowsheet=None, + suspended_growth_model='ASM1', + inf_kwargs={}, asm_kwargs={}, init_conds={}, aeration_processes=()): + ''' + Create the system Benchmark Simulation Model No.1. + + Parameters + ---------- + flowsheet : obj + Flowsheet where this system will be created on. + suspended_growth_model : str + Either "ASM1" using Activated Sludge Model No. 1, + or "ASM2d" using Activated Sludge Model No. 2d. + inf_kwargs : dict + Keyword arguments for influent. + asm_kwargs : dict + Keyword arguments for the ASM model (ASM1 or ASM2d). + init_conds : dict + Keyword arguments for initial conditions for the unit operations. + ''' flowsheet = flowsheet or qs.Flowsheet('bsm1') qs.main_flowsheet.set_flowsheet(flowsheet) # Components and stream - pc.create_asm1_cmps() + kind = suspended_growth_model.lower().replace('-', '').replace('_', '') + if kind == 'asm1': + cmps_f = pc.create_asm1_cmps + pc_f = pc.ASM1 + default_inf_kwargs = default_asm1_inf_kwargs + default_asm_kwargs = default_asm1_kwargs + elif kind == 'asm2d': + cmps_f = pc.create_asm2d_cmps + pc_f = pc.ASM2d + default_inf_kwargs = default_asm2d_inf_kwargs + default_asm_kwargs = default_asm2d_kwargs + else: raise ValueError('`suspended_growth_model` can only be "ASM1" or "ASM2d", ' + f'not {suspended_growth_model}.') + + cmps_f() wastewater = WasteStream('wastewater', T=Temp) inf_kwargs = inf_kwargs or default_inf_kwargs @@ -129,24 +202,24 @@ def create_system(flowsheet=None, inf_kwargs={}, asm_kwargs={}, init_conds={}, aer1 = aer2 = pc.DiffusedAeration('aer1', 'S_O', KLa=240, DOsat=8.0, V=V_ae) aer3 = pc.DiffusedAeration('aer3', 'S_O', KLa=84, DOsat=8.0, V=V_ae) asm_kwargs = asm_kwargs or default_asm_kwargs - asm1 = pc.ASM1(**asm_kwargs) + asm = pc_f(**asm_kwargs) # Create unit operations A1 = su.CSTR('A1', ins=[wastewater, RWW, RAS], V_max=V_an, - aeration=None, suspended_growth_model=asm1) + aeration=None, suspended_growth_model=asm) A2 = su.CSTR('A2', A1-0, V_max=V_an, - aeration=None, suspended_growth_model=asm1) + aeration=None, suspended_growth_model=asm) O1 = su.CSTR('O1', A2-0, V_max=V_ae, aeration=aer1, - DO_ID='S_O', suspended_growth_model=asm1) + DO_ID='S_O', suspended_growth_model=asm) O2 = su.CSTR('O2', O1-0, V_max=V_ae, aeration=aer2, - DO_ID='S_O', suspended_growth_model=asm1) + DO_ID='S_O', suspended_growth_model=asm) O3 = su.CSTR('O3', O2-0, [RWW, 'treated'], split=[0.6, 0.4], V_max=V_ae, aeration=aer3, - DO_ID='S_O', suspended_growth_model=asm1) + DO_ID='S_O', suspended_growth_model=asm) C1 = su.FlatBottomCircularClarifier('C1', O3-1, [effluent, RAS, WAS], underflow=Q_ras, wastage=Q_was, surface_area=1500, @@ -171,7 +244,7 @@ def create_system(flowsheet=None, inf_kwargs={}, asm_kwargs={}, init_conds={}, if init_conds: for i in [A1, A2, O1, O2, O3]: i.set_init_conc(**init_conds) - else: batch_init(sys, os.path.join(data_path, 'initial_conditions.xlsx'), 'default') + else: batch_init(sys, os.path.join(data_path, f'initial_conditions_{kind}.xlsx'), 'default') sys.set_dynamic_tracker(A1, effluent) sys.set_tolerance(rmol=1e-6) From 55424e77db7742ee65fa84095c0ce04b2528d60c Mon Sep 17 00:00:00 2001 From: Yalin Date: Sun, 15 Oct 2023 16:04:17 -0400 Subject: [PATCH 2/7] minor updates to initial conditions in `bsm1` --- .../bsm1/data/initial_conditions_asm2d.xlsx | Bin 22316 -> 12641 bytes exposan/bsm1/model.py | 9 +- exposan/bsm1/system.py | 89 ++++++++++++------ 3 files changed, 61 insertions(+), 37 deletions(-) diff --git a/exposan/bsm1/data/initial_conditions_asm2d.xlsx b/exposan/bsm1/data/initial_conditions_asm2d.xlsx index b444171dd1eb1bd9ad473571b8950d58904dfb23..a17c83beed066cfd323fbad1c47b992ed3fbda3c 100644 GIT binary patch delta 7842 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 Gdix)coL0gB literal 22316 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 diff --git a/exposan/bsm1/model.py b/exposan/bsm1/model.py index 002e8435..60db68d9 100644 --- a/exposan/bsm1/model.py +++ b/exposan/bsm1/model.py @@ -15,22 +15,17 @@ from warnings import warn from chaospy import distributions as shape from qsdsan.utils import DictAttrSetter, AttrGetter, FuncGetter, \ - load_data, get_SRT as srt, time_printer + get_SRT as srt, time_printer from exposan.bsm1 import ( biomass_IDs, create_system, - data_path, + default_asm1_init_conds as _ic, results_path, Q, Q_was, V_an, V_ae, ) __all__ = ('create_model', 'run_uncertainty', 'run_wdiff_init',) -# Default init condition -path = os.path.join(data_path, 'initial_conditions_asm1.xlsx') -df = load_data(path, sheet='default') -_ic = df.to_dict('index') - #%% diff --git a/exposan/bsm1/system.py b/exposan/bsm1/system.py index 5234a85a..66c38c8f 100644 --- a/exposan/bsm1/system.py +++ b/exposan/bsm1/system.py @@ -23,6 +23,7 @@ 'create_system', 'default_asm1_kwargs', 'default_asm2d_kwargs', 'default_asm1_inf_kwargs', 'default_asm2d_inf_kwargs', + 'default_asm1_init_conds', 'default_asm2d_init_conds', 'Q', 'Q_ras', 'Q_was', 'Temp', 'V_an', 'V_ae', ) @@ -109,24 +110,37 @@ k_PRE=1.0, k_RED=0.6, K_ALK_PRE=0.5, ) -# # Replaced by `batch_init` -# default_asm1_init_conds = { -# 'S_S':5, -# 'X_I':1000, -# 'X_S':100, -# 'X_BH':500, -# 'X_BA':100, -# 'X_P':100, -# 'S_O':2, -# 'S_NO':20, -# 'S_NH':2, -# 'S_ND':1, -# 'X_ND':1, -# 'S_ALK':7*12, -# } +default_asm1_init_conds = { + 'S_S':5, + 'X_I':1000, + 'X_S':100, + 'X_BH':500, + 'X_BA':100, + 'X_P':100, + 'S_O':2, + 'S_NO':20, + 'S_NH':2, + 'S_ND':1, + 'X_ND':1, + 'S_ALK':7*12, + } + +default_asm2d_init_conds = { + 'S_F':5, + 'S_A':2, + 'X_I':1000, + 'X_S':100, + 'X_H':500, + 'X_AUT':100, + #'X_P':100, + 'S_O2':2, + 'S_NO3':20, + 'S_NH4':2, + 'S_ALK':7*12, + } + -def batch_init(sys, path, sheet): - df = load_data(path, sheet) +def batch_init(sys, df): dct = df.to_dict('index') u = sys.flowsheet.unit # unit registry for k in [u.A1, u.A2, u.O1, u.O2, u.O3]: @@ -145,10 +159,14 @@ def batch_init(sys, path, sheet): # Benchmark Simulation Model No. 1 # ============================================================================= -def create_system(flowsheet=None, - suspended_growth_model='ASM1', - inf_kwargs={}, asm_kwargs={}, init_conds={}, - aeration_processes=()): +def create_system( + flowsheet=None, + suspended_growth_model='ASM1', + inf_kwargs={}, + asm_kwargs={}, + init_conds=None, + aeration_processes=(), + ): ''' Create the system Benchmark Simulation Model No.1. @@ -163,8 +181,11 @@ def create_system(flowsheet=None, Keyword arguments for influent. asm_kwargs : dict Keyword arguments for the ASM model (ASM1 or ASM2d). - init_conds : dict - Keyword arguments for initial conditions for the unit operations. + init_conds : dict or DataFrame + For a dict, keyword arguments for initial conditions for all bioreactors in the system + (the same initial conditions will be used), + or a pandas.DataFrame that contains initial conditions for each unit. + Default initial conditions will be used if not given. ''' flowsheet = flowsheet or qs.Flowsheet('bsm1') qs.main_flowsheet.set_flowsheet(flowsheet) @@ -176,11 +197,13 @@ def create_system(flowsheet=None, pc_f = pc.ASM1 default_inf_kwargs = default_asm1_inf_kwargs default_asm_kwargs = default_asm1_kwargs + DO_ID = 'S_O' elif kind == 'asm2d': cmps_f = pc.create_asm2d_cmps pc_f = pc.ASM2d default_inf_kwargs = default_asm2d_inf_kwargs default_asm_kwargs = default_asm2d_kwargs + DO_ID = 'S_O2' else: raise ValueError('`suspended_growth_model` can only be "ASM1" or "ASM2d", ' f'not {suspended_growth_model}.') @@ -199,8 +222,8 @@ def create_system(flowsheet=None, if aeration_processes: aer1, aer2, aer3 = aeration_processes else: - aer1 = aer2 = pc.DiffusedAeration('aer1', 'S_O', KLa=240, DOsat=8.0, V=V_ae) - aer3 = pc.DiffusedAeration('aer3', 'S_O', KLa=84, DOsat=8.0, V=V_ae) + aer1 = aer2 = pc.DiffusedAeration('aer1', DO_ID, KLa=240, DOsat=8.0, V=V_ae) + aer3 = pc.DiffusedAeration('aer3', DO_ID, KLa=84, DOsat=8.0, V=V_ae) asm_kwargs = asm_kwargs or default_asm_kwargs asm = pc_f(**asm_kwargs) @@ -212,14 +235,14 @@ def create_system(flowsheet=None, aeration=None, suspended_growth_model=asm) O1 = su.CSTR('O1', A2-0, V_max=V_ae, aeration=aer1, - DO_ID='S_O', suspended_growth_model=asm) + DO_ID=DO_ID, suspended_growth_model=asm) O2 = su.CSTR('O2', O1-0, V_max=V_ae, aeration=aer2, - DO_ID='S_O', suspended_growth_model=asm) + DO_ID=DO_ID, suspended_growth_model=asm) O3 = su.CSTR('O3', O2-0, [RWW, 'treated'], split=[0.6, 0.4], V_max=V_ae, aeration=aer3, - DO_ID='S_O', suspended_growth_model=asm) + DO_ID=DO_ID, suspended_growth_model=asm) C1 = su.FlatBottomCircularClarifier('C1', O3-1, [effluent, RAS, WAS], underflow=Q_ras, wastage=Q_was, surface_area=1500, @@ -243,8 +266,14 @@ def create_system(flowsheet=None, # sys = System('bsm1_sys', path=(bio, C1, S1), recycle=(RAS,)) if init_conds: - for i in [A1, A2, O1, O2, O3]: i.set_init_conc(**init_conds) - else: batch_init(sys, os.path.join(data_path, f'initial_conditions_{kind}.xlsx'), 'default') + if type(init_conds) is dict: + for i in [A1, A2, O1, O2, O3]: i.set_init_conc(**init_conds) + else: + df = init_conds + else: + path = os.path.join(data_path, f'initial_conditions_{kind}.xlsx') + df = load_data(path, sheet='default') + batch_init(sys, df) sys.set_dynamic_tracker(A1, effluent) sys.set_tolerance(rmol=1e-6) From 86d40ffbccae8a0fd4302ed11dd5e976429f5ca8 Mon Sep 17 00:00:00 2001 From: Yalin Date: Sun, 15 Oct 2023 19:05:40 -0400 Subject: [PATCH 3/7] minor code improvement --- exposan/bsm1/system.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/exposan/bsm1/system.py b/exposan/bsm1/system.py index 66c38c8f..55772eec 100644 --- a/exposan/bsm1/system.py +++ b/exposan/bsm1/system.py @@ -168,7 +168,7 @@ def create_system( aeration_processes=(), ): ''' - Create the system Benchmark Simulation Model No.1. + Create the system as described in Benchmark Simulation Model No.1. Parameters ---------- @@ -194,15 +194,13 @@ def create_system( kind = suspended_growth_model.lower().replace('-', '').replace('_', '') if kind == 'asm1': cmps_f = pc.create_asm1_cmps - pc_f = pc.ASM1 default_inf_kwargs = default_asm1_inf_kwargs - default_asm_kwargs = default_asm1_kwargs + asm = pc.ASM1(**default_asm1_kwargs) DO_ID = 'S_O' elif kind == 'asm2d': cmps_f = pc.create_asm2d_cmps - pc_f = pc.ASM2d default_inf_kwargs = default_asm2d_inf_kwargs - default_asm_kwargs = default_asm2d_kwargs + asm = pc.ASM2d(**default_asm2d_kwargs) DO_ID = 'S_O2' else: raise ValueError('`suspended_growth_model` can only be "ASM1" or "ASM2d", ' f'not {suspended_growth_model}.') @@ -224,25 +222,23 @@ def create_system( else: aer1 = aer2 = pc.DiffusedAeration('aer1', DO_ID, KLa=240, DOsat=8.0, V=V_ae) aer3 = pc.DiffusedAeration('aer3', DO_ID, KLa=84, DOsat=8.0, V=V_ae) - asm_kwargs = asm_kwargs or default_asm_kwargs - asm = pc_f(**asm_kwargs) # Create unit operations A1 = su.CSTR('A1', ins=[wastewater, RWW, RAS], V_max=V_an, - aeration=None, suspended_growth_model=asm) + aeration=None, suspended_growth_model=asm) A2 = su.CSTR('A2', A1-0, V_max=V_an, - aeration=None, suspended_growth_model=asm) + aeration=None, suspended_growth_model=asm) O1 = su.CSTR('O1', A2-0, V_max=V_ae, aeration=aer1, - DO_ID=DO_ID, suspended_growth_model=asm) + DO_ID=DO_ID, suspended_growth_model=asm) O2 = su.CSTR('O2', O1-0, V_max=V_ae, aeration=aer2, - DO_ID=DO_ID, suspended_growth_model=asm) + DO_ID=DO_ID, suspended_growth_model=asm) O3 = su.CSTR('O3', O2-0, [RWW, 'treated'], split=[0.6, 0.4], V_max=V_ae, aeration=aer3, - DO_ID=DO_ID, suspended_growth_model=asm) + DO_ID=DO_ID, suspended_growth_model=asm) C1 = su.FlatBottomCircularClarifier('C1', O3-1, [effluent, RAS, WAS], underflow=Q_ras, wastage=Q_was, surface_area=1500, From 364f890771fe0b85fe2a54b933e4e90d3a4cd9c4 Mon Sep 17 00:00:00 2001 From: Yalin Date: Sun, 15 Oct 2023 19:06:05 -0400 Subject: [PATCH 4/7] initial bsm2 layout --- exposan/bsm2/system.py | 145 +++++++++++++++++++++++++++++++++++------ 1 file changed, 126 insertions(+), 19 deletions(-) diff --git a/exposan/bsm2/system.py b/exposan/bsm2/system.py index 7d382638..21a2b904 100644 --- a/exposan/bsm2/system.py +++ b/exposan/bsm2/system.py @@ -6,7 +6,7 @@ Yalin Li - Saumitra Rai + # Saumitra Rai Joy Zhang @@ -16,21 +16,128 @@ ''' import os, numpy as np, qsdsan as qs -from qsdsan import processes as pc, sanunits as su, WasteStream, System - -__all__ = ('create_components',) - -def create_components(): - asm2d_cmps = pc.create_asm2d_cmps() - asm2d_cmps.X_S.f_BOD5_COD = 0.54 - CO2 = qs.Component('S_CO2', search_ID='CO2', particle_size='Dissolved gas', - degradability='Undegradable', organic=False) - CH4 = qs.Component('S_CH4', search_ID='CH4', particle_size='Dissolved gas', - degradability='Undegradable', organic=False) - H2 = qs.Component('S_H2', search_ID='H2', particle_size='Dissolved gas', - degradability='Undegradable', organic=False) - cmps1 = qs.Components.load_default() - ash = cmps1.X_Ig_ISS.copy('ash') - cmps = qs.Components([*asm2d_cmps, CO2, CH4, H2, ash]) - cmps.compile() - return cmps +from qsdsan import ( + processes as pc, + sanunits as su, + WasteStream, + ) +#!!! Need to verify system settings +from exposan.bsm1 import ( + default_asm1_kwargs, + default_asm1_inf_kwargs, + default_asm1_init_conds, + Q, Q_ras, Q_was, Temp, V_an, V_ae, + ) + +from exposan.bsm2 import results_path +from exposan.adm import default_init_conds as default_adm1_init_conds + +__all__ = ('create_system',) + + +# %% + + +# def create_components(): +# asm2d_cmps = pc.create_asm2d_cmps() +# asm2d_cmps.X_S.f_BOD5_COD = 0.54 +# S_CO2 = qs.Component('S_CO2', search_ID='CO2', particle_size='Dissolved gas', +# degradability='Undegradable', organic=False) +# cmps1 = qs.Components.load_default() +# # CH4 = qs.Component('S_CH4', search_ID='CH4', particle_size='Dissolved gas', +# # degradability='Readily', organic=True) +# # H2 = qs.Component('S_H2', search_ID='H2', particle_size='Dissolved gas', +# # degradability='Readily', organic=False) +# S_CH4 = cmps1.S_CH4.copy('S_CH4') +# S_H2 = cmps1.S_H2.copy('S_H2') +# Ash = cmps1.X_Ig_ISS.copy('Ash') +# cmps = qs.Components([*asm2d_cmps, S_CO2, S_CH4, S_H2, Ash]) +# cmps.compile() +# return cmps + +def create_system(flowsheet=None): + flowsheet = flowsheet or qs.Flowsheet('bsm2') + qs.main_flowsheet.set_flowsheet(flowsheet) + unit = flowsheet.unit + + # ASM1 components and process model + cmps_asm1 = pc.create_asm1_cmps() + thermo_asm1 = qs.get_thermo() + DO_ID = 'S_O' + asm1 = pc.ASM1(**default_asm1_kwargs) + aer1 = aer2 = pc.DiffusedAeration('aer1', DO_ID, KLa=240, DOsat=8.0, V=V_ae) + aer3 = pc.DiffusedAeration('aer3', DO_ID, KLa=84, DOsat=8.0, V=V_ae) + + # Influent + wastewater = WasteStream('wastewater', T=Temp) + wastewater.set_flow_by_concentration(Q, **default_asm1_inf_kwargs) + + # Primary clarifier + C1 = su.PrimaryClarifierBSM2( + 'C1', + ins=(wastewater, 'thickener_recycle', 'storage_recycle'), + outs=('C1_eff', 'C1_underflow'), + isdynamic=True, + ) + + # Unit operations in BSM1 + A1 = su.CSTR('A1', ins=[C1-0, 'RAS'], V_max=V_an, + aeration=None, suspended_growth_model=asm1) + + A2 = su.CSTR('A2', A1-0, V_max=V_an, + aeration=None, suspended_growth_model=asm1) + + O1 = su.CSTR('O1', A2-0, V_max=V_ae, aeration=aer1, + DO_ID=DO_ID, suspended_growth_model=asm1) + + O2 = su.CSTR('O2', O1-0, V_max=V_ae, aeration=aer2, + DO_ID=DO_ID, suspended_growth_model=asm1) + + O3 = su.CSTR('O3', O2-0, # [RWW, 'treated'], split=[0.6, 0.4], + V_max=V_ae, aeration=aer3, + DO_ID=DO_ID, suspended_growth_model=asm1) + + C2 = su.FlatBottomCircularClarifier( + 'C2', O3-0, ['effluent', 1-A1, 'WAS'], + underflow=Q_ras, wastage=Q_was, surface_area=1500, + height=4, N_layer=10, feed_layer=5, + X_threshold=3000, v_max=474, v_max_practical=250, + rh=5.76e-4, rp=2.86e-3, fns=2.28e-3, + ) + TC1 = su.Thickener('TC1', C2-2, outs=['thickened_sludge', 1-C1], + thickener_perc=7, TSS_removal_perc=97.14) + M1 = su.Mixer('M1', ins=(C1-1, TC1-0)) + + # Switch to ADM1 components for the anaerobic digester + cmps_adm1 = pc.create_adm1_cmps() + thermo_adm1 = qs.get_thermo() + adm1 = qs.processes.ADM1() + cmps_adm1.X_I.i_N = cmps_asm1.X_I.i_N + + J1 = su.ASMtoADM('J1', upstream=M1-0, thermo=thermo_adm1, isdynamic=True, adm1_model=adm1) # WAS is C1.outs[2] + AD1 = su.AnaerobicCSTR('AD1', ins=J1.outs[0], outs=('biogas', 'AD_eff'), isdynamic=True ,model=adm1, + retain_cmps=[i for i in cmps_adm1.IDs if i.startswith('X_')]) + AD1.set_init_conc(**default_adm1_init_conds) + # Switch back to ASM1 components + J2 = su.ADMtoASM('J2', upstream=AD1-1, thermo=thermo_asm1, isdynamic=True, adm1_model=adm1) + qs.set_thermo(thermo_asm1) + + C3 = su.Centrifuge(ID='C3', ins=J2-0, outs = ['digested_sludge', 'C3_eff'], + thickener_perc=27, TSS_removal_perc=96.29) + + #!!! Should be a stroage tank with HRT = 1 + T1 = su.HydraulicDelay('T1', C3-1, t_delay=1) + T1-0-2-C1 + + sys = flowsheet.create_system('bsm2_sys') + sys.set_tolerance(mol=1e-5, rmol=1e-5) + sys.maxiter = 5000 + sys.set_dynamic_tracker(unit.A1, unit.C1, J1, AD1, J2) + + return sys + + +# %% + +if __name__ == '__main__': + bsm2_sys = create_system() \ No newline at end of file From f30786be0890ec40e6355863341ad8d5455b4ec4 Mon Sep 17 00:00:00 2001 From: Yalin Date: Mon, 16 Oct 2023 12:35:23 -0400 Subject: [PATCH 5/7] rename module --- .../bsm2/{system_to_be_deleted.py => system_legacy_interface.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename exposan/bsm2/{system_to_be_deleted.py => system_legacy_interface.py} (100%) diff --git a/exposan/bsm2/system_to_be_deleted.py b/exposan/bsm2/system_legacy_interface.py similarity index 100% rename from exposan/bsm2/system_to_be_deleted.py rename to exposan/bsm2/system_legacy_interface.py From dcddc05ee23a5e6bf31a0bd8e5e3bdcbac466834 Mon Sep 17 00:00:00 2001 From: Yalin Date: Mon, 16 Oct 2023 21:53:43 -0400 Subject: [PATCH 6/7] checkpoint on updating bsm2 config --- exposan/bsm1/model.py | 4 +- exposan/bsm1/system.py | 115 ++++++++++++++++++------------------ exposan/bsm2/__init__.py | 4 +- exposan/bsm2/data/data.xlsx | Bin 0 -> 123730 bytes exposan/bsm2/system.py | 70 ++++++++++++++++++---- 5 files changed, 124 insertions(+), 69 deletions(-) create mode 100644 exposan/bsm2/data/data.xlsx diff --git a/exposan/bsm1/model.py b/exposan/bsm1/model.py index 60db68d9..08fc348c 100644 --- a/exposan/bsm1/model.py +++ b/exposan/bsm1/model.py @@ -19,13 +19,15 @@ from exposan.bsm1 import ( biomass_IDs, create_system, - default_asm1_init_conds as _ic, + default_init_conds, results_path, Q, Q_was, V_an, V_ae, ) __all__ = ('create_model', 'run_uncertainty', 'run_wdiff_init',) +_ic = default_init_conds['asm1'] + #%% diff --git a/exposan/bsm1/system.py b/exposan/bsm1/system.py index 55772eec..9d262ce2 100644 --- a/exposan/bsm1/system.py +++ b/exposan/bsm1/system.py @@ -21,9 +21,9 @@ __all__ = ( 'biomass_IDs', 'create_system', - 'default_asm1_kwargs', 'default_asm2d_kwargs', - 'default_asm1_inf_kwargs', 'default_asm2d_inf_kwargs', - 'default_asm1_init_conds', 'default_asm2d_init_conds', + 'default_asm_kwargs', + 'default_inf_kwargs', + 'default_init_conds', 'Q', 'Q_ras', 'Q_was', 'Temp', 'V_an', 'V_ae', ) @@ -49,7 +49,9 @@ # aer.B = 1750.286 # aer.C = 235.0 -default_asm1_inf_kwargs = { +valid_models = ('asm1', 'asm2d') +default_inf_kwargs = dict.fromkeys(valid_models) +default_inf_kwargs['asm1'] = { 'concentrations': { 'S_S':69.5, 'X_BH':28.17, @@ -64,7 +66,7 @@ 'units': ('m3/d', 'mg/L'), } -default_asm2d_inf_kwargs = { +default_inf_kwargs ['asm2d'] = { 'concentrations': { 'S_I': 14, 'X_I': 26.5, @@ -81,11 +83,12 @@ 'X_AUT': 0, 'X_PAO': 0, 'S_ALK':7*12, - }, + }, 'units': ('m3/d', 'mg/L'), } -default_asm1_kwargs = dict( +default_asm_kwargs = dict.fromkeys(valid_models) +default_asm_kwargs['asm1'] = dict( Y_A=0.24, Y_H=0.67, f_P=0.08, i_XB=0.08, i_XP=0.06, mu_H=4.0, K_S=10.0, K_O_H=0.2, K_NO=0.5, b_H=0.3, eta_g=0.8, eta_h=0.8, k_h=3.0, K_X=0.1, mu_A=0.5, @@ -93,50 +96,52 @@ path=os.path.join(data_path, '_asm1.tsv'), ) -default_asm2d_kwargs = dict(iN_SI=0.01, iN_SF=0.03, iN_XI=0.02, iN_XS=0.04, iN_BM=0.07, - iP_SI=0.0, iP_SF=0.01, iP_XI=0.01, iP_XS=0.01, iP_BM=0.02, - iTSS_XI=0.75, iTSS_XS=0.75, iTSS_BM=0.9, - f_SI=0.0, Y_H=0.625, f_XI_H=0.1, - Y_PAO=0.625, Y_PO4=0.4, Y_PHA=0.2, f_XI_PAO=0.1, - Y_A=0.24, f_XI_AUT=0.1, - K_h=3.0, eta_NO3=0.6, eta_fe=0.4, K_O2=0.2, K_NO3=0.5, K_X=0.1, - mu_H=6.0, q_fe=3.0, eta_NO3_H=0.8, b_H=0.4, K_O2_H=0.2, K_F=4.0, - K_fe=4.0, K_A_H=4.0, K_NO3_H=0.5, K_NH4_H=0.05, K_P_H=0.01, K_ALK_H=0.1, - q_PHA=3.0, q_PP=1.5, mu_PAO=1.0, eta_NO3_PAO=0.6, b_PAO=0.2, b_PP=0.2, - b_PHA=0.2, K_O2_PAO=0.2, K_NO3_PAO=0.5, K_A_PAO=4.0, K_NH4_PAO=0.05, - K_PS=0.2, K_P_PAO=0.01, K_ALK_PAO=0.1, - K_PP=0.01, K_MAX=0.34, K_IPP=0.02, K_PHA=0.01, - mu_AUT=1.0, b_AUT=0.15, K_O2_AUT=0.5, K_NH4_AUT=1.0, K_ALK_AUT=0.5, K_P_AUT=0.01, - k_PRE=1.0, k_RED=0.6, K_ALK_PRE=0.5, - ) +default_asm_kwargs['asm2d'] = dict( + iN_SI=0.01, iN_SF=0.03, iN_XI=0.02, iN_XS=0.04, iN_BM=0.07, + iP_SI=0.0, iP_SF=0.01, iP_XI=0.01, iP_XS=0.01, iP_BM=0.02, + iTSS_XI=0.75, iTSS_XS=0.75, iTSS_BM=0.9, + f_SI=0.0, Y_H=0.625, f_XI_H=0.1, + Y_PAO=0.625, Y_PO4=0.4, Y_PHA=0.2, f_XI_PAO=0.1, + Y_A=0.24, f_XI_AUT=0.1, + K_h=3.0, eta_NO3=0.6, eta_fe=0.4, K_O2=0.2, K_NO3=0.5, K_X=0.1, + mu_H=6.0, q_fe=3.0, eta_NO3_H=0.8, b_H=0.4, K_O2_H=0.2, K_F=4.0, + K_fe=4.0, K_A_H=4.0, K_NO3_H=0.5, K_NH4_H=0.05, K_P_H=0.01, K_ALK_H=0.1, + q_PHA=3.0, q_PP=1.5, mu_PAO=1.0, eta_NO3_PAO=0.6, b_PAO=0.2, b_PP=0.2, + b_PHA=0.2, K_O2_PAO=0.2, K_NO3_PAO=0.5, K_A_PAO=4.0, K_NH4_PAO=0.05, + K_PS=0.2, K_P_PAO=0.01, K_ALK_PAO=0.1, + K_PP=0.01, K_MAX=0.34, K_IPP=0.02, K_PHA=0.01, + mu_AUT=1.0, b_AUT=0.15, K_O2_AUT=0.5, K_NH4_AUT=1.0, K_ALK_AUT=0.5, K_P_AUT=0.01, + k_PRE=1.0, k_RED=0.6, K_ALK_PRE=0.5, + ) -default_asm1_init_conds = { - 'S_S':5, - 'X_I':1000, - 'X_S':100, - 'X_BH':500, - 'X_BA':100, - 'X_P':100, - 'S_O':2, - 'S_NO':20, - 'S_NH':2, - 'S_ND':1, - 'X_ND':1, - 'S_ALK':7*12, +default_init_conds = dict.fromkeys(valid_models) +default_init_conds['asm1'] = { + 'S_S':5, + 'X_I':1000, + 'X_S':100, + 'X_BH':500, + 'X_BA':100, + 'X_P':100, + 'S_O':2, + 'S_NO':20, + 'S_NH':2, + 'S_ND':1, + 'X_ND':1, + 'S_ALK':7*12, } -default_asm2d_init_conds = { - 'S_F':5, - 'S_A':2, - 'X_I':1000, - 'X_S':100, - 'X_H':500, - 'X_AUT':100, - #'X_P':100, - 'S_O2':2, - 'S_NO3':20, - 'S_NH4':2, - 'S_ALK':7*12, +default_init_conds['asm2d'] = { + 'S_F':5, + 'S_A':2, + 'X_I':1000, + 'X_S':100, + 'X_H':500, + 'X_AUT':100, + #'X_P':100, + 'S_O2':2, + 'S_NO3':20, + 'S_NH4':2, + 'S_ALK':7*12, } @@ -193,22 +198,18 @@ def create_system( # Components and stream kind = suspended_growth_model.lower().replace('-', '').replace('_', '') if kind == 'asm1': - cmps_f = pc.create_asm1_cmps - default_inf_kwargs = default_asm1_inf_kwargs - asm = pc.ASM1(**default_asm1_kwargs) + pc.create_asm1_cmps() + asm = pc.ASM1(**default_asm_kwargs[kind]) DO_ID = 'S_O' elif kind == 'asm2d': - cmps_f = pc.create_asm2d_cmps - default_inf_kwargs = default_asm2d_inf_kwargs - asm = pc.ASM2d(**default_asm2d_kwargs) + pc.create_asm2d_cmps() + asm = pc.ASM2d(**default_asm_kwargs[kind]) DO_ID = 'S_O2' else: raise ValueError('`suspended_growth_model` can only be "ASM1" or "ASM2d", ' f'not {suspended_growth_model}.') - cmps_f() - wastewater = WasteStream('wastewater', T=Temp) - inf_kwargs = inf_kwargs or default_inf_kwargs + inf_kwargs = inf_kwargs or default_inf_kwargs[kind] wastewater.set_flow_by_concentration(Q, **inf_kwargs) effluent = WasteStream('effluent', T=Temp) diff --git a/exposan/bsm2/__init__.py b/exposan/bsm2/__init__.py index d0ba8de4..e5ecc2f7 100644 --- a/exposan/bsm2/__init__.py +++ b/exposan/bsm2/__init__.py @@ -18,7 +18,8 @@ bsm2_path = os.path.dirname(__file__) module = os.path.split(bsm2_path)[-1] -data_path, results_path = _init_modules(module, include_data_path=True) +data_path, results_path, figures_path = \ + _init_modules(module, include_data_path=True, include_figures_path=True) # %% @@ -52,6 +53,7 @@ def __getattr__(name): __all__ = ( 'bsm2_path', + 'figures_path', 'results_path', *system.__all__, ) \ No newline at end of file diff --git a/exposan/bsm2/data/data.xlsx b/exposan/bsm2/data/data.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fcd6b184e88437d9b6712750fc6043fbbaea908f GIT binary patch literal 123730 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%0Ddn|EyVLhR+Kz2-d@rVBSY~ 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 literal 0 HcmV?d00001 diff --git a/exposan/bsm2/system.py b/exposan/bsm2/system.py index 21a2b904..0a09aafe 100644 --- a/exposan/bsm2/system.py +++ b/exposan/bsm2/system.py @@ -23,13 +23,13 @@ ) #!!! Need to verify system settings from exposan.bsm1 import ( - default_asm1_kwargs, - default_asm1_inf_kwargs, - default_asm1_init_conds, + default_asm_kwargs, + default_inf_kwargs, + default_init_conds, Q, Q_ras, Q_was, Temp, V_an, V_ae, ) -from exposan.bsm2 import results_path +from exposan.bsm2 import figures_path, results_path from exposan.adm import default_init_conds as default_adm1_init_conds __all__ = ('create_system',) @@ -55,6 +55,54 @@ # cmps.compile() # return cmps +#!!! Not sure if this is already provided as the steady state +# Qin0 = 20648; +Q = 20648.361 # influent flowrate [m3/d] +Q_intr = 3 * Q #!!! what is this? +Q_ras = Q # recycle sludge flowrate +Q_was = 300 # sludge wastage flowrate +Temp = 273.15+14.85808 # temperature [K] + +default_inf_kwargs = { + 'concentrations': { + 'S_I': 27.226191, + 'S_S': 58.176186, + 'X_I': 92.499001, + 'X_S': 363.94347, + 'X_BH': 50.683288, + 'S_NH': 23.859466, + 'S_ND': 5.651606, + 'X_ND': 16.129816, + 'S_ALK': 7*12, + }, + 'units': ('m3/d', 'mg/L'), + } + +# default_adm_kwargs = dict( +# Y_A=0.24, Y_H=0.67, f_P=0.08, i_XB=0.08, i_XP=0.06, +# mu_H=4.0, K_S=10.0, K_O_H=0.2, K_NO=0.5, b_H=0.3, +# eta_g=0.8, eta_h=0.8, k_h=3.0, K_X=0.1, mu_A=0.5, +# K_NH=1.0, b_A=0.05, K_O_A=0.4, k_a=0.05, fr_SS_COD=0.75, +# ) + +# def __new__(cls, components=None, path=None, N_xc=2.686e-3, N_I=4.286e-3, N_aa=7e-3, +# f_ch_xc=0.2, f_pr_xc=0.2, f_li_xc=0.3, f_xI_xc=0.2, +# f_fa_li=0.95, f_bu_su=0.13, f_pro_su=0.27, f_ac_su=0.41, +# f_va_aa=0.23, f_bu_aa=0.26, f_pro_aa=0.05, f_ac_aa=0.4, +# f_ac_fa=0.7, f_pro_va=0.54, f_ac_va=0.31, f_ac_bu=0.8, f_ac_pro=0.57, +# Y_su=0.1, Y_aa=0.08, Y_fa=0.06, Y_c4=0.06, Y_pro=0.04, Y_ac=0.05, Y_h2=0.06, +# q_dis=0.5, q_ch_hyd=10, q_pr_hyd=10, q_li_hyd=10, +# k_su=30, k_aa=50, k_fa=6, k_c4=20, k_pro=13, k_ac=8, k_h2=35, +# K_su=0.5, K_aa=0.3, K_fa=0.4, K_c4=0.2, K_pro=0.1, K_ac=0.15, K_h2=7e-6, +# b_su=0.02, b_aa=0.02, b_fa=0.02, b_c4=0.02, b_pro=0.02, b_ac=0.02, b_h2=0.02, +# KI_h2_fa=5e-6, KI_h2_c4=1e-5, KI_h2_pro=3.5e-6, KI_nh3=1.8e-3, KS_IN=1e-4, +# pH_limits_aa=(4,5.5), pH_limits_ac=(6,7), pH_limits_h2=(5,6), +# T_base=298.15, pKa_base=[14, 9.25, 6.35, 4.76, 4.88, 4.82, 4.86], +# Ka_dH=[55900, 51965, 7646, 0, 0, 0, 0], +# kLa=200, K_H_base=[7.8e-4, 1.4e-3, 3.5e-2], +# K_H_dH=[-4180, -14240, -19410], +# **kwargs): + def create_system(flowsheet=None): flowsheet = flowsheet or qs.Flowsheet('bsm2') qs.main_flowsheet.set_flowsheet(flowsheet) @@ -64,15 +112,15 @@ def create_system(flowsheet=None): cmps_asm1 = pc.create_asm1_cmps() thermo_asm1 = qs.get_thermo() DO_ID = 'S_O' - asm1 = pc.ASM1(**default_asm1_kwargs) + asm1 = pc.ASM1(**default_asm_kwargs['asm1']) aer1 = aer2 = pc.DiffusedAeration('aer1', DO_ID, KLa=240, DOsat=8.0, V=V_ae) aer3 = pc.DiffusedAeration('aer3', DO_ID, KLa=84, DOsat=8.0, V=V_ae) # Influent wastewater = WasteStream('wastewater', T=Temp) - wastewater.set_flow_by_concentration(Q, **default_asm1_inf_kwargs) + wastewater.set_flow_by_concentration(Q, **default_inf_kwargs) - # Primary clarifier + # Primary clarifier using the Otterpohl-Freund model C1 = su.PrimaryClarifierBSM2( 'C1', ins=(wastewater, 'thickener_recycle', 'storage_recycle'), @@ -97,6 +145,7 @@ def create_system(flowsheet=None): V_max=V_ae, aeration=aer3, DO_ID=DO_ID, suspended_growth_model=asm1) + # 10-layer one-dimensional settler model C2 = su.FlatBottomCircularClarifier( 'C2', O3-0, ['effluent', 1-A1, 'WAS'], underflow=Q_ras, wastage=Q_was, surface_area=1500, @@ -122,11 +171,11 @@ def create_system(flowsheet=None): J2 = su.ADMtoASM('J2', upstream=AD1-1, thermo=thermo_asm1, isdynamic=True, adm1_model=adm1) qs.set_thermo(thermo_asm1) - C3 = su.Centrifuge(ID='C3', ins=J2-0, outs = ['digested_sludge', 'C3_eff'], + C3 = su.Centrifuge(ID='C3', ins=J2-0, outs=['digested_sludge', 'C3_eff'], thickener_perc=27, TSS_removal_perc=96.29) #!!! Should be a stroage tank with HRT = 1 - T1 = su.HydraulicDelay('T1', C3-1, t_delay=1) + T1 = su.HydraulicDelay('T1', C3-1, outs='liquid_recycle', t_delay=1) T1-0-2-C1 sys = flowsheet.create_system('bsm2_sys') @@ -140,4 +189,5 @@ def create_system(flowsheet=None): # %% if __name__ == '__main__': - bsm2_sys = create_system() \ No newline at end of file + bsm2_sys = create_system() + bsm2_sys.diagram(file=os.path.join(figures_path, 'bsm2_sys'), format='png') \ No newline at end of file From a164e6f8e91f1b54d0627df184421fe4e7c006e4 Mon Sep 17 00:00:00 2001 From: Yalin Date: Tue, 17 Oct 2023 22:37:51 -0400 Subject: [PATCH 7/7] add initial conditions for bioreactors --- exposan/bsm2/data/data.xlsx | Bin 123730 -> 124659 bytes exposan/bsm2/system.py | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/exposan/bsm2/data/data.xlsx b/exposan/bsm2/data/data.xlsx index fcd6b184e88437d9b6712750fc6043fbbaea908f..f259dcb2ac63923013a174da9c2a552ac717df65 100644 GIT binary patch delta 7100 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 Lgp;s#KMe3cu%chm diff --git a/exposan/bsm2/system.py b/exposan/bsm2/system.py index 0a09aafe..c78734b9 100644 --- a/exposan/bsm2/system.py +++ b/exposan/bsm2/system.py @@ -23,10 +23,7 @@ ) #!!! Need to verify system settings from exposan.bsm1 import ( - default_asm_kwargs, - default_inf_kwargs, default_init_conds, - Q, Q_ras, Q_was, Temp, V_an, V_ae, ) from exposan.bsm2 import figures_path, results_path @@ -62,6 +59,37 @@ Q_ras = Q # recycle sludge flowrate Q_was = 300 # sludge wastage flowrate Temp = 273.15+14.85808 # temperature [K] +V_an = 1500 # anoxic zone tank volume +V_ae = 3000 # aerated zone tank volume + +# Parameters for AS system at 15 degC, based on BSM1 +default_asm_kwargs = dict( + mu_H=4.0, #6.0; + K_S=10.0, #20; + K_O_H=0.2, # K_OH = 0.2; + K_NO=0.5, + b_H=0.3, #0.62; + mu_A=0.5, #0.8; + K_NH=1.0, + K_O_A=0.4, # K_OA = 0.4; + b_A=0.05, #0.2; + eta_g=0.8, # ny_g + k_a=0.05, #0.08; + k_h=3.0, + K_X=0.1, #0.03; + eta_h=0.8, # ny_h #0.4; + Y_H=0.67, + Y_A=0.24, + f_P=0.08, + i_XB=0.08, #0.086; + i_XP=0.06, + fr_SS_COD=0.75, # X_I2TSS, X_S2TSS, X_BH2TSS, X_BA2TSS, X_P2TSS + # path=os.path.join(data_path, '_asm1.tsv'), + ) + + +# O2 saturation concentration at 15 degC, based on BSM1 +SOSAT1 = 8; default_inf_kwargs = { 'concentrations': { @@ -113,6 +141,7 @@ def create_system(flowsheet=None): thermo_asm1 = qs.get_thermo() DO_ID = 'S_O' asm1 = pc.ASM1(**default_asm_kwargs['asm1']) + # The O2 saturation concentration of 8 is at 15 degC, based on BSM1 aer1 = aer2 = pc.DiffusedAeration('aer1', DO_ID, KLa=240, DOsat=8.0, V=V_ae) aer3 = pc.DiffusedAeration('aer3', DO_ID, KLa=84, DOsat=8.0, V=V_ae)