Hello everyone,
New to CADET here, I work as a downstream processing specialist particularly Monoclonals purification. I am trying to first understand CADET’s architecture and i have successfully simulated adsorption using Langmuir and LumpedRateModelWithPores, However I am facing challenges modeling IEC using SMA, I followed the tutorial for one component and was able to reproduce chromatograms successfully but I wanted to simulate 3 components,
Since new users can’t upload attachments here is my code
from CADETProcess.processModel import ComponentSystem
from CADETProcess.processModel import StericMassAction
from CADETProcess.processModel import Inlet, LumpedRateModelWithPores, Outlet,GeneralRateModel
from CADETProcess.processModel import FlowSheet
from CADETProcess.processModel import Process
# %%
# Defining Components
componentSystem = ComponentSystem()
componentSystem.add_component('Salt')
componentSystem.add_component('Impurity A')
componentSystem.add_component('Product')
componentSystem.add_component('Impurity B')
# %%
inlet = Inlet(componentSystem,'inlet')
outlet = Outlet(componentSystem,'outlet')
column = GeneralRateModel(componentSystem,'column')
# %%
# mmodel.reference
model = StericMassAction(componentSystem,'model')
model.is_kinetic = True
model.steric_factor = [0,25.5,15.2,10.7]
model.characteristic_charge = [0,5.2,5.6,3.3]
model.adsorption_rate = [0,0.30,0.650,0.10]
model.desorption_rate = [0,1,1,1]
model.capacity = 400
# model =Langmuir(componentSystem,'model')
# model.is_kinetic = False
# model.adsorption_rate = [0.0329,0.0037,0.016]
# model.desorption_rate = [1,1,1]
# model.capacity = 100
# model.missing_parameters
# %%
column.missing_parameters
# %%
column.binding_model = model
column.length = 0.25
column.diameter = 0.0115
column.bed_porosity = 0.37
column.particle_radius = 4.5e-5
column.particle_porosity = 0.33
column.axial_dispersion = 2.0e-7
column.film_diffusion = [2.0e-5, 2.0e-7, 2.0e-7, 2.0e-7]
column.pore_diffusion = [7e-5, 1e-9,1e-9,1e-9]
column.surface_diffusion = [0.0, 0.0,0.0,0.0]
# column.q = [model.capacity,0,0,0]
column.check_required_parameters()
# %%
sheet = FlowSheet(componentSystem,'flow_sheet')
# %%
sheet.add_unit(inlet)
sheet.add_unit(column)
sheet.add_unit(outlet)
sheet.add_connection(inlet,column)
sheet.add_connection(column,outlet)
# %%
inlet.flow_rate = 2.88e-8
# %%
process = Process(sheet,'process')
# %%
# column.c = [0.1,0,0,0]
# process.add_event('equilibration','flow_sheet.inlet.c',[100,0,0,0],0)
process.add_event('equilibration','flow_sheet.inlet.c',[0.001,0,0,0],0)
process.add_event('feed_on','flow_sheet.inlet.c',[0.001,50,100,25],300)
process.add_event('feed_off','flow_sheet.inlet.c',[0.1,0,0,0],1500)
process.add_event('wash','flow_sheet.inlet.c',[5,0,0,0],3000)
# process.add_event('wash','flow_sheet.inlet.c',[1,0,0,0],301)
# process.add_event('gradient_start','flow_sheet.inlet.c',[[0.01,1/60],0,0,0],100)
# process.add_event('step_1','flow_sheet.inlet.c',[10,0,0,0],100)
# process.add_event('step_2','flow_sheet.inlet.c',[20,0,0,0],400)
# process.add_event('step_3','flow_sheet.inlet.c',[200,0,0,0],700)
process.cycle_time = 5000
# column.q = [model.capacity,0,0,0]
# %%
from CADETProcess.simulator import Cadet
simulator = Cadet()
# simulator.simulate(process)
# %%
process.plot_events()
# process.result()
# %%
result = simulator.simulate(process)
from CADETProcess.plotting import SecondaryAxis
sec = SecondaryAxis()
sec.components = ["Salt"]
sec.y_label = '$c_{salt}$'
# result.solution.outlet.outlet.plot()
# %%
result.solution.column.outlet.plot(secondary_axis=sec)
Code in bold is commented out , I tried simulating different events but the chromatogram shows that the salt elutes with the components which didn’t happen in the tutorial. I tried equilibration instead of predefining a concentration in the column and i tried both, all 3 peaks co-elute together with no separation albeit i tried varying adsorption… how should one go about this ?
Thank you in advance, ![]()
I am sorry if my understanding or code is unclear but I just started this two weeks ago to use it for process development eventually.