def build_process(self): flow_sheet = self.build_flow_sheet() process = Process(flow_sheet, self.name) self.add_events(process) return process
fs = FlowSheet(n_comp=2, name=flow_sheet_name) fs.add_unit(feed, feed_source=True) fs.add_unit(eluent, eluent_source=True) fs.add_unit(tank) fs.add_unit(column) fs.add_unit(outlet, chromatogram_sink=True) fs.add_connection(feed, tank) fs.add_connection(tank, column) fs.add_connection(eluent, column) fs.add_connection(column, tank) fs.add_connection(column, outlet) # Process ssr_binary = Process(fs, name=process_name) Q = 60 / (60 * 1e6) # Create Events and Durations ssr_binary.add_event('feed_on', 'flow_sheet.feed.flow_rate', Q) ssr_binary.add_event('feed_off', 'flow_sheet.feed.flow_rate', 0.0) ssr_binary.add_duration('feed_duration', 'feed_on', 'feed_off') ssr_binary.add_event('inject_on', 'flow_sheet.tank.flow_rate', Q) ssr_binary.add_event('inject_off', 'flow_sheet.tank.flow_rate', 0.0) ssr_binary.add_event('eluent_on', 'flow_sheet.eluent.flow_rate', Q) ssr_binary.add_event_dependency('eluent_on', ['inject_off']) ssr_binary.add_event('eluent_off', 'flow_sheet.eluent.flow_rate', 0.0) ssr_binary.add_event_dependency('eluent_off', ['inject_on'])
# flow sheet fs = FlowSheet(component_system) fs.add_unit(feed, feed_source=True) fs.add_unit(eluent, eluent_source=True) fs.add_unit(eluent_salt, eluent_source=True) fs.add_unit(column) fs.add_unit(outlet, chromatogram_sink=True) fs.add_connection(feed, column) fs.add_connection(eluent, column) fs.add_connection(eluent_salt, column) fs.add_connection(column, outlet) # Process lwe = Process(fs, 'lwe') lwe.cycle_time = 15000.0 ## Create Events and Durations Q = 2.88e-8 feed_duration = 7500.0 gradient_start = 9500.0 gradient_slope = Q / (lwe.cycle_time - gradient_start) lwe.add_event('feed_on', 'flow_sheet.feed.flow_rate', Q) lwe.add_event('feed_off', 'flow_sheet.feed.flow_rate', 0.0) lwe.add_duration('feed_duration', time=feed_duration) lwe.add_event_dependency('feed_off', ['feed_on', 'feed_duration'], [1, 1]) lwe.add_event('eluent_initialization', 'flow_sheet.eluent.flow_rate', 0) lwe.add_event('eluent_salt_initialization', 'flow_sheet.eluent_salt.flow_rate',
def simulate_solid_equilibria(binding_model, buffer, unit_model='cstr', flush=None): process_name = flow_sheet_name = 'initial_conditions' component_system = binding_model.component_system # Unit Operations buffer_source = Source(component_system, name='buffer') buffer_source.c = buffer if flush is None: flush = buffer flush_source = Source(component_system, 'flush') flush_source.c = flush if unit_model == 'cstr': unit = Cstr(component_system, 'cstr') unit.porosity = 0.5 unit.V = 1e-6 Q = 1e-6 cycle_time = 1000 * unit.volume / Q unit.flow_rate = Q elif unit_model == 'column': unit = LumpedRateModelWithoutPores(component_system, name='column') unit.length = 0.1 unit.diameter = 0.01 unit.axial_dispersion = 1e-6 unit.total_porosity = 0.7 Q = 60 / (60 * 1e6) cycle_time = 10 * unit.volume / Q try: q = binding_model.n_comp * binding_model.n_states * [0] q[0] = binding_model.capacity unit.q = q except AttributeError: pass unit.binding_model = binding_model outlet = Sink(component_system, name='outlet') # flow sheet fs = FlowSheet(component_system, name=flow_sheet_name) fs.add_unit(buffer_source) fs.add_unit(flush_source) fs.add_unit(unit) fs.add_unit(outlet, chromatogram_sink=True) fs.add_connection(buffer_source, unit) fs.add_connection(flush_source, unit) fs.add_connection(unit, outlet) # Process proc = Process(fs, name=process_name) proc.cycle_time = cycle_time ## Create Events and Durations proc.add_event('buffer_on', 'flow_sheet.buffer.flow_rate', Q) proc.add_event('buffer_off', 'flow_sheet.buffer.flow_rate', 0, 0.9 * cycle_time) proc.add_event('eluent_off', 'flow_sheet.flush.flow_rate', 0.0, 0.0) proc.add_event('eluent_on', 'flow_sheet.flush.flow_rate', Q, 0.9 * cycle_time) # Simulator process_simulator = Cadet() process_simulator.unit_return_parameters.write_solution_bulk = True process_simulator.unit_return_parameters.write_solution_solid = True proc_results = process_simulator.simulate(proc) if unit_model == 'cstr': init_q = proc_results.solution[unit.name].solid.solution[-1, :] elif unit_model == 'column': init_q = proc_results.solution[unit.name].solid.solution[-1, 0, :] return init_q.tolist()
outlet = Sink(n_comp=3, name='outlet') # flow sheet fs = FlowSheet(n_comp=3, name=flow_sheet_name) fs.add_unit(feed, feed_source=True) fs.add_unit(eluent, eluent_source=True) fs.add_unit(column) fs.add_unit(outlet, chromatogram_sink=True) fs.add_connection(feed, column) fs.add_connection(eluent, column) fs.add_connection(column, outlet) # Process batch_long_ternary = Process(fs, name=process_name) Q = 60 / (60 * 1e6) # Create Events and Durations batch_long_ternary.add_event('feed_on', 'flow_sheet.feed.flow_rate', Q) batch_long_ternary.add_event('feed_off', 'flow_sheet.feed.flow_rate', 0.0) batch_long_ternary.add_duration('feed_duration', 'feed_on', 'feed_off') batch_long_ternary.add_event('eluent_on', 'flow_sheet.eluent.flow_rate', Q) batch_long_ternary.add_event('eluent_off', 'flow_sheet.eluent.flow_rate', 0.0) batch_long_ternary.add_event_dependency('eluent_on', ['feed_off']) batch_long_ternary.add_event_dependency('eluent_off', ['feed_on']) batch_long_ternary.add_event_dependency('feed_off', ['feed_on', 'feed_duration'], [1, 1])
outlet = Sink(component_system, name='outlet') # flow sheet fs = FlowSheet(component_system) fs.add_unit(feed, feed_source=True) fs.add_unit(eluent, eluent_source=True) fs.add_unit(column) fs.add_unit(outlet, chromatogram_sink=True) fs.add_connection(feed, column) fs.add_connection(eluent, column) fs.add_connection(column, outlet) # Process batch_binary = Process(fs, 'batch_binary') ## Create Events and Durations Q = 60 / (60 * 1e6) batch_binary.add_event('feed_on', 'flow_sheet.feed.flow_rate', Q) batch_binary.add_event('feed_off', 'flow_sheet.feed.flow_rate', 0.0) batch_binary.add_duration('feed_duration') batch_binary.add_event('eluent_on', 'flow_sheet.eluent.flow_rate', Q) batch_binary.add_event('eluent_off', 'flow_sheet.eluent.flow_rate', 0.0) batch_binary.add_event_dependency('eluent_on', ['feed_off']) batch_binary.add_event_dependency('eluent_off', ['feed_on']) batch_binary.add_event_dependency('feed_off', ['feed_on', 'feed_duration'], [1, 1])
fs.add_unit(eluent_1, eluent_source=True) fs.add_unit(eluent_2, eluent_source=True) fs.add_unit(column_1) fs.add_unit(column_2) fs.add_unit(outlet_1, chromatogram_sink=True) fs.add_unit(outlet_2, chromatogram_sink=True) fs.add_connection(feed, column_1) fs.add_connection(eluent_1, column_1) fs.add_connection(column_1, outlet_1) fs.add_connection(column_1, column_2) fs.add_connection(eluent_2, column_2) fs.add_connection(column_2, outlet_2) # Process serial_ternary = Process(fs, name=process_name) Q = 60 / (60 * 1e6) # Create Events and Durations serial_ternary.add_event('feed_on', 'flow_sheet.feed.flow_rate', Q) serial_ternary.add_event('feed_off', 'flow_sheet.feed.flow_rate', 0.0) serial_ternary.add_duration('feed_duration', 'feed_on', 'feed_off') serial_ternary.add_event('eluent_1_on', 'flow_sheet.eluent_1.flow_rate', Q) serial_ternary.add_event('eluent_1_off', 'flow_sheet.eluent_1.flow_rate', 0.0) serial_ternary.add_event_dependency('eluent_1_on', ['feed_off'], [1]) serial_ternary.add_event_dependency('eluent_1_off', ['feed_on'], [1]) serial_ternary.add_event_dependency('feed_off', ['feed_on', 'feed_duration'], [1, 1])