write_solution_solid error with Spreading binding model

Expected behavior.

I’m using the Spreading binding model in CADET-Process (version 0.11.1) and would like to output the solid-phase concentrations of the bound protein in orientation 1 (q1), in orientation 2 (q2), and the total bound concentration (q).
I expected that setting column.solution_recorder.write_solution_solid = True would include this information in the output.

Actual behavior

When I enable solid-phase output using:
column.solution_recorder.write_solution_solid = True

I get the following error:
ValueError: Expected size (1001, 100, 1)

Traceback:

Traceback (most recent call last):
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\log.py", line 192, in wrapper
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\simulator\simulator.py", line 334, in simulate_n_cycles
    return self._run(process, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\simulator\cadetAdapter.py", line 154, in wrapper
    results = func(self, process, *args, **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\simulator\cadetAdapter.py", line 297, in _run
    results = self.get_simulation_results(
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\simulator\cadetAdapter.py", line 154, in wrapper
    results = func(self, process, *args, **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\simulator\cadetAdapter.py", line 597, in get_simulation_results        
    SolutionSolid(
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\solution.py", line 1484, in __init__
    super().__init__(name, component_system, time, solution)
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\solution.py", line 127, in __init__
    self.solution = solution
    ^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\dataStructure\parameter.py", line 176, in __set__
    value = self._prepare(instance, value, recursive=True)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\dataStructure\parameter.py", line 1342, in _prepare
    self.check_size(instance, value_array)
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\dataStructure\parameter.py", line 1161, in check_size
    raise ValueError(f"Expected size {expected_size}")
ValueError: Expected size (101, 100, 1)
Traceback (most recent call last):
  File "c:\Users\elena.bull\Desktop\CADET - VS CODE\ZRM papers\Ghosh_2013\probleem spreading model.py", line 41, in <module>
    simulation_results = simulator.simulate(process)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\simulator\simulator.py", line 275, in simulate
    results = self.simulate_n_cycles(
              ^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\log.py", line 164, in wrapper
    result = function(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\log.py", line 225, in wrapper
    results = function(*args, **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\log.py", line 200, in wrapper
    raise e
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\log.py", line 192, in wrapper
    return function(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\simulator\simulator.py", line 334, in simulate_n_cycles
    return self._run(process, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\simulator\cadetAdapter.py", line 154, in wrapper
    results = func(self, process, *args, **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\simulator\cadetAdapter.py", line 297, in _run
    results = self.get_simulation_results(
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\simulator\cadetAdapter.py", line 154, in wrapper
    results = func(self, process, *args, **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\simulator\cadetAdapter.py", line 597, in get_simulation_results        
    SolutionSolid(
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\solution.py", line 1484, in __init__
    super().__init__(name, component_system, time, solution)
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\solution.py", line 127, in __init__
    self.solution = solution
    ^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\dataStructure\parameter.py", line 176, in __set__
    value = self._prepare(instance, value, recursive=True)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\dataStructure\parameter.py", line 1342, in _prepare
    self.check_size(instance, value_array)
  File "c:\Users\elena.bull\AppData\Local\miniconda3\envs\cadet_env1\Lib\site-packages\CADETProcess\dataStructure\parameter.py", line 1161, in check_size
    raise ValueError(f"Expected size {expected_size}")
ValueError: Expected size (101, 100, 1)

How to produce bug (including a minimal reproducible example)

from CADETProcess.processModel import ComponentSystem, Inlet, Outlet, LumpedRateModelWithoutPores, Spreading, FlowSheet, Process

component_system = ComponentSystem(1)

inlet = Inlet(component_system, name='inlet')
inlet.c = 0.0152  # mol/m^3
inlet.flow_rate = 1e-6  # m^3/s

outlet = Outlet(component_system, name='outlet')

binding_model = Spreading(component_system, n_binding_sites=2, name="Spreading")
binding_model.adsorption_rate = [5.333, 0]
binding_model.desorption_rate = [1.06E-05, 0]
binding_model.capacity = [4.304, 3.762]
binding_model.exchange_from_1_2 = [0.049]
binding_model.exchange_from_2_1 = [9.41E-03]
binding_model.is_kinetic = True

column = LumpedRateModelWithoutPores(component_system, name="column")
column.length = 0.0022
column.diameter = 0.04
column.total_porosity = 0.7
column.axial_dispersion = 7e-11
column.binding_model = binding_model

column.solution_recorder.write_solution_solid = True

flow_sheet = FlowSheet(component_system, "flow_sheet")
flow_sheet.add_unit(inlet)
flow_sheet.add_unit(column)
flow_sheet.add_unit(outlet)
flow_sheet.add_connection(inlet, column)
flow_sheet.add_connection(column, outlet)

process = Process(flow_sheet, name="process")
process.cycle_time = 100  # s

from CADETProcess.simulator import Cadet

simulator = Cadet()
simulation_results = simulator.simulate(process)

Hi Elena and welcome to the Forum! :nerd_face:

Thanks for reporting this issue. I’ve opened a PR that should hopefully fix this. Please let me know if you have further issues.

2 Likes