Units Operations Package
This section documents all process unit classes in SPROCLIB.
Base Classes
Base classes for SPROCLIB - Standard Process Control Library
This module imports the ProcessModel abstract base class from ProcessModel.py.
Author: Thorsten Gressling <gressling@paramus.ai> License: MIT License
- class sproclib.unit.base.ProcessModel(name='ProcessModel')[source]
Bases:
ABCAbstract base class for process models.
- Parameters:
name (str)
- __init__(name='ProcessModel')[source]
Initialize process model.
- Parameters:
name (str) – Model name for identification
- abstract dynamics(t, x, u)[source]
Define the process dynamics dx/dt = f(t, x, u).
- Parameters:
t (float) – Time
x (<MagicMock id='130137683462864'>) – State variables
u (<MagicMock id='130137683462528'>) – Input variables
- Returns:
State derivatives dx/dt
- Return type:
<MagicMock id=’130137683461856’>
- abstract steady_state(u)[source]
Calculate steady-state values for given inputs.
- Parameters:
u (<MagicMock id='130137683462192'>) – Input variables
- Returns:
Steady-state values
- Return type:
<MagicMock id=’130137683464208’>
- simulate(t_span, x0, u_func, t_eval=None)[source]
Simulate the process model.
- Parameters:
- Returns:
Dictionary with ‘t’, ‘x’, ‘u’ arrays
- Return type:
Pumps and Compressors
Pump module for SPROCLIB - Standard Process Control Library
This module contains various pump models for liquid pumping operations.
- class sproclib.unit.pump.Pump(eta=0.7, rho=1000.0, flow_nominal=1.0, delta_P_nominal=200000.0, name='Pump')[source]
Bases:
ProcessModelGeneric liquid pump model (steady-state and dynamic).
- __init__(eta=0.7, rho=1000.0, flow_nominal=1.0, delta_P_nominal=200000.0, name='Pump')[source]
Initialize process model.
- steady_state(u)[source]
Calculate steady-state outlet pressure and power for given inlet conditions and flow. :param u: [P_inlet, flow]
- Returns:
[P_outlet, Power]
- Parameters:
u (<MagicMock id='130137682161888'>)
- Return type:
<MagicMock id=’130137682162224’>
- class sproclib.unit.pump.CentrifugalPump(H0=50.0, K=20.0, eta=0.7, rho=1000.0, name='CentrifugalPump')[source]
Bases:
PumpCentrifugal pump with quadratic head-flow curve.
- __init__(H0=50.0, K=20.0, eta=0.7, rho=1000.0, name='CentrifugalPump')[source]
Initialize process model.
- class sproclib.unit.pump.PositiveDisplacementPump(flow_rate=1.0, eta=0.8, rho=1000.0, name='PositiveDisplacementPump')[source]
Bases:
PumpPositive displacement pump (constant flow, variable pressure).
- __init__(flow_rate=1.0, eta=0.8, rho=1000.0, name='PositiveDisplacementPump')[source]
Initialize process model.
- steady_state(u)[source]
Calculate outlet pressure and power for given inlet pressure. :param u: [P_inlet]
- Returns:
[P_outlet, Power]
- Parameters:
u (<MagicMock id='130137682625936'>)
- Return type:
<MagicMock id=’130137682626272’>
Compressor module for SPROCLIB - Standard Process Control Library
This module imports the Compressor class from Compressor.py.
- class sproclib.unit.compressor.Compressor(eta_isentropic=0.75, P_suction=100000.0, P_discharge=300000.0, T_suction=300.0, gamma=1.4, R=8.314, M=0.028, flow_nominal=1.0, name='Compressor')[source]
Bases:
ProcessModelGeneric gas compressor model (steady-state and dynamic).
- Parameters:
- __init__(eta_isentropic=0.75, P_suction=100000.0, P_discharge=300000.0, T_suction=300.0, gamma=1.4, R=8.314, M=0.028, flow_nominal=1.0, name='Compressor')[source]
Initialize process model.
- steady_state(u)[source]
Calculate steady-state outlet temperature and power for given inlet conditions and flow. :param u: [P_suction, T_suction, P_discharge, flow]
- Returns:
[T_out, Power]
- Parameters:
u (<MagicMock id='130137682632992'>)
- Return type:
<MagicMock id=’130137682633328’>
Tanks and Vessels
Tank Models for SPROCLIB
This package contains tank models for liquid storage and processing applications in chemical process simulation and control.
Available Tank Models: - Tank: Single gravity-drained tank - InteractingTanks: Two tanks in series
Author: Thorsten Gressling <gressling@paramus.ai> License: MIT License
- class sproclib.unit.tank.Tank(A=1.0, C=1.0, name='GravityTank')[source]
Bases:
ProcessModelGravity-drained tank model.
- dynamics(t, x, u)[source]
Tank dynamics: dh/dt = (q_in - C*sqrt(h))/A
- Parameters:
t (float) – Time
x (<MagicMock id='130137682158192'>) – [height]
u (<MagicMock id='130137682158528'>) – [q_in] - inlet flow rate
- Returns:
[dh/dt]
- Return type:
<MagicMock id=’130137683475296’>
- steady_state(u)[source]
Steady-state height: h = (q_in/C)²
- Parameters:
u (<MagicMock id='130137683473952'>) – [q_in] - inlet flow rate
- Returns:
[h_ss] - steady-state height
- Return type:
<MagicMock id=’130137683474624’>
- class sproclib.unit.tank.InteractingTanks(A1=1.0, A2=1.0, C1=1.0, C2=1.0, name='InteractingTanks')[source]
Bases:
ProcessModelTwo interacting tanks in series.
- __init__(A1=1.0, A2=1.0, C1=1.0, C2=1.0, name='InteractingTanks')[source]
Initialize interacting tanks model.
- dynamics(t, x, u)[source]
Interacting tanks dynamics: dh1/dt = (q_in - C1*sqrt(h1))/A1 dh2/dt = (C1*sqrt(h1) - C2*sqrt(h2))/A2
- Parameters:
t (float) – Time
x (<MagicMock id='130137682154160'>) – [h1, h2] - tank heights
u (<MagicMock id='130137682153824'>) – [q_in] - inlet flow rate
- Returns:
[dh1/dt, dh2/dt]
- Return type:
<MagicMock id=’130137682153488’>
Valves and Flow Control
Valve Models for SPROCLIB
This package contains valve models for flow control and process regulation in chemical process simulation and control.
Available Valve Models: - ControlValve: Variable control valve for flow regulation - ThreeWayValve: Three-way valve for flow routing
Author: Thorsten Gressling <gressling@paramus.ai> License: MIT License
- class sproclib.unit.valve.ControlValve(Cv_max=100.0, valve_type='linear', dead_time=0.5, time_constant=2.0, rangeability=50.0, name='ControlValve')[source]
Bases:
ProcessModelControl valve model with flow coefficient (Cv) characteristics and dead-time.
Features: - Flow coefficient-based flow calculations - Valve position dead-time modeling - Pressure drop compensation - Valve characteristics (linear, equal percentage, quick opening) - Saturation limits
- Parameters:
- __init__(Cv_max=100.0, valve_type='linear', dead_time=0.5, time_constant=2.0, rangeability=50.0, name='ControlValve')[source]
Initialize control valve model.
- Parameters:
Cv_max (float) – Maximum flow coefficient (gpm/psi^0.5)
valve_type (str) – Valve characteristic (‘linear’, ‘equal_percentage’, ‘quick_opening’)
dead_time (float) – Valve position dead-time (seconds)
time_constant (float) – Valve actuator time constant (seconds)
rangeability (float) – Valve rangeability (Cv_max/Cv_min)
name (str) – Valve identifier
- dynamics(t, x, u)[source]
Valve dynamics with dead-time and first-order lag.
State: [actual_position, flow_rate] Input: [position_command, upstream_pressure, downstream_pressure, density]
- Parameters:
t (float) – Time
x (<MagicMock id='130137682625600'>) – [actual_position, flow_rate]
u (<MagicMock id='130137682625264'>) – [position_command, P_upstream, P_downstream, rho]
- Returns:
[d(position)/dt, d(flow)/dt]
- Return type:
<MagicMock id=’130137682624592’>
- steady_state(u)[source]
Calculate steady-state valve position and flow.
- Parameters:
u (<MagicMock id='130137682627280'>) – [position_command, P_upstream, P_downstream, rho]
- Returns:
[position, flow_rate]
- Return type:
<MagicMock id=’130137682627616’>
- class sproclib.unit.valve.ThreeWayValve(Cv_max=100.0, valve_config='mixing', dead_time=0.5, time_constant=2.0, name='ThreeWayValve')[source]
Bases:
ProcessModelThree-way control valve model for flow splitting/mixing applications.
Features: - Mixing and diverting configurations - Flow coefficient-based calculations - Dead-time in valve position - Flow distribution control
- __init__(Cv_max=100.0, valve_config='mixing', dead_time=0.5, time_constant=2.0, name='ThreeWayValve')[source]
Initialize three-way valve model.
- dynamics(t, x, u)[source]
Three-way valve dynamics.
For mixing: u = [position_command, P1_in, P2_in, P_out, rho] For diverting: u = [position_command, P_in, P1_out, P2_out, rho]
- Parameters:
t (float)
x (<MagicMock id='130137682629968'>)
u (<MagicMock id='130137682630304'>)
- Return type:
<MagicMock id=’130137682630640’>
- steady_state(u)[source]
Calculate steady-state flows.
- Parameters:
u (<MagicMock id='130137682163568'>)
- Return type:
<MagicMock id=’130137682164240’>
Heat Exchangers
Heat Exchanger Module for SPROCLIB
This module imports heat exchanger classes.
Author: Thorsten Gressling <gressling@paramus.ai> License: MIT License
- class sproclib.unit.heat_exchanger.HeatExchanger(U=500.0, A=10.0, m_hot=1.0, m_cold=1.2, cp_hot=4180.0, cp_cold=4180.0, V_hot=0.1, V_cold=0.1, rho_hot=1000.0, rho_cold=1000.0, name='HeatExchanger')[source]
Bases:
ProcessModelCounter-current heat exchanger model with thermal dynamics.
- Parameters:
- __init__(U=500.0, A=10.0, m_hot=1.0, m_cold=1.2, cp_hot=4180.0, cp_cold=4180.0, V_hot=0.1, V_cold=0.1, rho_hot=1000.0, rho_cold=1000.0, name='HeatExchanger')[source]
Initialize counter-current heat exchanger.
- Parameters:
U (float) – Overall heat transfer coefficient [W/m²·K]
A (float) – Heat transfer area [m²]
m_hot (float) – Hot fluid mass flow rate [kg/s]
m_cold (float) – Cold fluid mass flow rate [kg/s]
cp_hot (float) – Hot fluid specific heat [J/kg·K]
cp_cold (float) – Cold fluid specific heat [J/kg·K]
V_hot (float) – Hot fluid volume [m³]
V_cold (float) – Cold fluid volume [m³]
rho_hot (float) – Hot fluid density [kg/m³]
rho_cold (float) – Cold fluid density [kg/m³]
name (str) – Model name
- dynamics(t, x, u)[source]
Heat exchanger dynamics with thermal time constants.
- Parameters:
t (float) – Time
x (<MagicMock id='130137682159872'>) – [T_hot_out, T_cold_out]
u (<MagicMock id='130137682160208'>) – [T_hot_in, T_cold_in, m_hot_new, m_cold_new]
- Returns:
[dT_hot_out/dt, dT_cold_out/dt]
- Return type:
<MagicMock id=’130137682160544’>
- steady_state(u)[source]
Calculate steady-state outlet temperatures.
- Parameters:
u (<MagicMock id='130137682160880'>) – [T_hot_in, T_cold_in, m_hot, m_cold]
- Returns:
[T_hot_out_ss, T_cold_out_ss]
- Return type:
<MagicMock id=’130137682161216’>
- calculate_heat_transfer_rate(T_hot_in, T_cold_in, T_hot_out, T_cold_out)[source]
Calculate the actual heat transfer rate.
- calculate_lmtd(T_hot_in, T_cold_in, T_hot_out, T_cold_out)[source]
Calculate Log Mean Temperature Difference (LMTD).
Reactors
Reactor Models for SPROCLIB
This package contains various reactor models for chemical process simulation and control design. Each reactor type is organized in its own subpackage containing the class definition, documentation, tests, and examples.
Available Reactors: - CSTR: Continuous Stirred Tank Reactor - BatchReactor: Batch reactor with heating/cooling - PlugFlowReactor: Plug Flow Reactor with axial discretization - FixedBedReactor: Fixed bed catalytic reactor - SemiBatchReactor: Semi-batch reactor with feed control - FluidizedBedReactor: Fluidized bed reactor with two-phase modeling
Author: Thorsten Gressling <gressling@paramus.ai> License: MIT License
- class sproclib.unit.reactor.CSTR(V=100.0, k0=72000000000.0, Ea=72750.0, R=8.314, rho=1000.0, Cp=0.239, dHr=-50000.0, UA=50000.0, name='CSTR')[source]
Bases:
ProcessModelContinuous Stirred Tank Reactor model.
- Parameters:
- __init__(V=100.0, k0=72000000000.0, Ea=72750.0, R=8.314, rho=1000.0, Cp=0.239, dHr=-50000.0, UA=50000.0, name='CSTR')[source]
Initialize CSTR model.
- Parameters:
V (float) – Reactor volume [L]
k0 (float) – Arrhenius pre-exponential factor [1/min]
Ea (float) – Activation energy [J/gmol]
R (float) – Gas constant [J/gmol/K]
rho (float) – Density [g/L]
Cp (float) – Heat capacity [J/g/K]
dHr (float) – Heat of reaction [J/gmol]
UA (float) – Heat transfer coefficient [J/min/K]
name (str) – Model name
- dynamics(t, x, u)[source]
CSTR dynamics: dCA/dt = q/V*(CAi - CA) - k(T)*CA dT/dt = q/V*(Ti - T) + (-dHr)*k(T)*CA/(rho*Cp) + UA*(Tc - T)/(V*rho*Cp)
- Parameters:
t (float) – Time
x (<MagicMock id='130137683468912'>) – [CA, T] - concentration and temperature
u (<MagicMock id='130137683469248'>) – [q, CAi, Ti, Tc] - flow rate, inlet concentration, inlet temp, coolant temp
- Returns:
[dCA/dt, dT/dt]
- Return type:
<MagicMock id=’130137683469584’>
- steady_state(u)[source]
Calculate steady-state for CSTR (requires numerical solution).
- Parameters:
u (<MagicMock id='130137683469920'>) – [q, CAi, Ti, Tc] - operating conditions
- Returns:
[CA_ss, T_ss] - steady-state concentration and temperature
- Return type:
<MagicMock id=’130137683470256’>
- class sproclib.unit.reactor.BatchReactor(V=100.0, k0=72000000000.0, Ea=72750.0, delta_H=-52000.0, rho=1000.0, cp=4180.0, U=500.0, A=5.0, name='BatchReactor')[source]
Bases:
ProcessModelBatch reactor model with heating/cooling.
- Parameters:
- __init__(V=100.0, k0=72000000000.0, Ea=72750.0, delta_H=-52000.0, rho=1000.0, cp=4180.0, U=500.0, A=5.0, name='BatchReactor')[source]
Initialize batch reactor.
- Parameters:
V (float) – Reactor volume [L]
k0 (float) – Pre-exponential factor [1/min]
Ea (float) – Activation energy [J/mol]
delta_H (float) – Heat of reaction [J/mol]
rho (float) – Density [kg/m³]
cp (float) – Heat capacity [J/kg·K]
U (float) – Heat transfer coefficient [W/m²·K]
A (float) – Heat transfer area [m²]
name (str) – Model name
- dynamics(t, x, u)[source]
Batch reactor dynamics.
State variables: x[0]: Concentration [mol/L] x[1]: Temperature [K]
Input variables: u[0]: Jacket temperature [K]
- Parameters:
t (float) – Time
x (<MagicMock id='130137683472272'>) – [CA, T]
u (<MagicMock id='130137683472608'>) – [Tj]
- Returns:
[dCA/dt, dT/dt]
- Return type:
<MagicMock id=’130137683472944’>
- steady_state(u)[source]
Batch reactor doesn’t have a traditional steady state. Returns initial conditions for given jacket temperature.
- Parameters:
u (<MagicMock id='130137683473280'>) – [Tj]
- Returns:
Initial conditions [CA0, T0]
- Return type:
<MagicMock id=’130137683473616’>
- calculate_conversion(CA, CA0=1.0)[source]
Calculate conversion based on initial and current concentration.
- class sproclib.unit.reactor.PlugFlowReactor(L=10.0, A_cross=0.1, n_segments=20, k0=72000000000.0, Ea=72750.0, delta_H=-52000.0, rho=1000.0, cp=4180.0, U=500.0, D_tube=0.1, name='PlugFlowReactor')[source]
Bases:
ProcessModelPlug Flow Reactor (PFR) model with axial discretization.
- Parameters:
- __init__(L=10.0, A_cross=0.1, n_segments=20, k0=72000000000.0, Ea=72750.0, delta_H=-52000.0, rho=1000.0, cp=4180.0, U=500.0, D_tube=0.1, name='PlugFlowReactor')[source]
Initialize plug flow reactor with axial discretization.
- Parameters:
L (float) – Reactor length [m]
A_cross (float) – Cross-sectional area [m²]
n_segments (int) – Number of axial segments for discretization
k0 (float) – Pre-exponential factor [1/min]
Ea (float) – Activation energy [J/mol]
delta_H (float) – Heat of reaction [J/mol]
rho (float) – Density [kg/m³]
cp (float) – Heat capacity [J/kg·K]
U (float) – Heat transfer coefficient [W/m²·K]
D_tube (float) – Tube diameter [m]
name (str) – Model name
- dynamics(t, x, u)[source]
PFR dynamics with axial discretization.
State variables (for each segment): x[0:n_segments]: Concentration in each segment [mol/L] x[n_segments:2*n_segments]: Temperature in each segment [K]
Input variables: u[0]: Inlet flow rate [L/min] u[1]: Inlet concentration [mol/L] u[2]: Inlet temperature [K] u[3]: Coolant temperature [K]
- Parameters:
t (float) – Time
x (<MagicMock id='130137683471936'>) – State vector [CA_segments, T_segments]
u (<MagicMock id='130137683471600'>) – [q, CAi, Ti, Tc]
- Returns:
State derivatives
- Return type:
<MagicMock id=’130137683471264’>
- steady_state(u)[source]
Calculate steady-state concentration and temperature profile.
- Parameters:
u (<MagicMock id='130137683468576'>) – [q, CAi, Ti, Tc]
- Returns:
Steady-state values [CA_segments, T_segments]
- Return type:
<MagicMock id=’130137683463536’>
- class sproclib.unit.reactor.FixedBedReactor(L=5.0, D=1.0, epsilon=0.4, rho_cat=1500.0, dp=0.005, k0=1000000.0, Ea=50000.0, delta_H=-50000.0, rho=1000.0, cp=4180.0, U=100.0, n_segments=20, name='FixedBedReactor')[source]
Bases:
ProcessModelFixed bed catalytic reactor model.
- Parameters:
- __init__(L=5.0, D=1.0, epsilon=0.4, rho_cat=1500.0, dp=0.005, k0=1000000.0, Ea=50000.0, delta_H=-50000.0, rho=1000.0, cp=4180.0, U=100.0, n_segments=20, name='FixedBedReactor')[source]
Initialize fixed bed reactor.
- Parameters:
L (float) – Bed length [m]
D (float) – Bed diameter [m]
epsilon (float) – Bed porosity [-]
rho_cat (float) – Catalyst density [kg/m³]
dp (float) – Particle diameter [m]
k0 (float) – Pre-exponential factor [m³/kg·s]
Ea (float) – Activation energy [J/mol]
delta_H (float) – Heat of reaction [J/mol]
rho (float) – Fluid density [kg/m³]
cp (float) – Heat capacity [J/kg·K]
U (float) – Overall heat transfer coefficient [W/m²·K]
n_segments (int) – Number of axial segments
name (str) – Model name
- dynamics(t, x, u)[source]
Fixed bed reactor dynamics with axial discretization.
State variables (for each segment): x[0:n_segments]: Concentration in each segment [mol/m³] x[n_segments:2*n_segments]: Temperature in each segment [K]
Input variables: u[0]: Inlet volumetric flow rate [m³/s] u[1]: Inlet concentration [mol/m³] u[2]: Inlet temperature [K] u[3]: Wall temperature [K]
- Parameters:
t (float) – Time
x (<MagicMock id='130137683475968'>) – State vector [CA_segments, T_segments]
u (<MagicMock id='130137682149456'>) – [Q, CAi, Ti, Tw]
- Returns:
State derivatives
- Return type:
<MagicMock id=’130137682149792’>
- steady_state(u)[source]
Calculate steady-state concentration and temperature profile.
- Parameters:
u (<MagicMock id='130137682150128'>) – [Q, CAi, Ti, Tw]
- Returns:
Steady-state values [CA_segments, T_segments]
- Return type:
<MagicMock id=’130137682150464’>
- class sproclib.unit.reactor.SemiBatchReactor(V_max=200.0, k0=72000000000.0, Ea=72750.0, delta_H=-52000.0, rho=1000.0, cp=4180.0, U=500.0, A_heat=5.0, name='SemiBatchReactor')[source]
Bases:
ProcessModelSemi-batch reactor model with fed-batch operation.
- Parameters:
- __init__(V_max=200.0, k0=72000000000.0, Ea=72750.0, delta_H=-52000.0, rho=1000.0, cp=4180.0, U=500.0, A_heat=5.0, name='SemiBatchReactor')[source]
Initialize semi-batch reactor.
- Parameters:
V_max (float) – Maximum reactor volume [L]
k0 (float) – Pre-exponential factor [1/min]
Ea (float) – Activation energy [J/mol]
delta_H (float) – Heat of reaction [J/mol]
rho (float) – Density [kg/m³]
cp (float) – Heat capacity [J/kg·K]
U (float) – Heat transfer coefficient [W/m²·K]
A_heat (float) – Heat transfer area [m²]
name (str) – Model name
- dynamics(t, x, u)[source]
Semi-batch reactor dynamics.
State variables: x[0]: Total moles of A [mol] x[1]: Temperature [K] x[2]: Volume [L]
Input variables: u[0]: Feed flow rate [L/min] u[1]: Feed concentration [mol/L] u[2]: Feed temperature [K] u[3]: Jacket temperature [K]
- Parameters:
t (float) – Time
x (<MagicMock id='130137682152144'>) – [nA, T, V]
u (<MagicMock id='130137682152480'>) – [qf, CAf, Tf, Tj]
- Returns:
[dnA/dt, dT/dt, dV/dt]
- Return type:
<MagicMock id=’130137682152816’>
- steady_state(u)[source]
Semi-batch reactor doesn’t have a traditional steady state. Returns initial conditions.
- Parameters:
u (<MagicMock id='130137682153152'>) – [qf, CAf, Tf, Tj]
- Returns:
Initial conditions [nA0, T0, V0]
- Return type:
<MagicMock id=’130137683475632’>
- class sproclib.unit.reactor.FluidizedBedReactor(H=3.0, D=2.0, U_mf=0.1, rho_cat=1500.0, dp=0.0005, epsilon_mf=0.5, k0=100000.0, Ea=60000.0, delta_H=-80000.0, K_bc=5.0, K_ce=20.0, name='FluidizedBedReactor')[source]
Bases:
ProcessModelFluidized bed catalytic reactor model with bubble and emulsion phases.
- Parameters:
- __init__(H=3.0, D=2.0, U_mf=0.1, rho_cat=1500.0, dp=0.0005, epsilon_mf=0.5, k0=100000.0, Ea=60000.0, delta_H=-80000.0, K_bc=5.0, K_ce=20.0, name='FluidizedBedReactor')[source]
Initialize fluidized bed reactor with two-phase model.
- Parameters:
H (float) – Bed height [m]
D (float) – Bed diameter [m]
U_mf (float) – Minimum fluidization velocity [m/s]
rho_cat (float) – Catalyst density [kg/m³]
dp (float) – Particle diameter [m]
epsilon_mf (float) – Voidage at minimum fluidization [-]
k0 (float) – Pre-exponential factor [m³/kg·s]
Ea (float) – Activation energy [J/mol]
delta_H (float) – Heat of reaction [J/mol]
K_bc (float) – Bubble-cloud mass transfer coefficient [1/s]
K_ce (float) – Cloud-emulsion mass transfer coefficient [1/s]
name (str) – Model name
- dynamics(t, x, u)[source]
Fluidized bed reactor dynamics with two-phase model.
State variables: [CA_bubble, CA_emulsion, T] Input variables: [CA_in, T_in, U_g, T_coolant]
- Parameters:
t (float) – Time [s]
x (<MagicMock id='130137682155168'>) – State variables
u (<MagicMock id='130137682155504'>) – Input variables
- Returns:
State derivatives
- Return type:
<MagicMock id=’130137682155840’>
- steady_state(u)[source]
Calculate steady-state concentrations and temperature.
- Parameters:
u (<MagicMock id='130137682156176'>) – Input variables [CA_in, T_in, U_g, T_coolant]
- Returns:
Steady-state values [CA_bubble, CA_emulsion, T]
- Return type:
<MagicMock id=’130137682156512’>
Distillation
Distillation Models for SPROCLIB
This package contains distillation models for separation process simulation and control design.
Available Distillation Models: - DistillationTray: Individual tray model for binary systems - BinaryDistillationColumn: Complete column model
Author: Thorsten Gressling <gressling@paramus.ai> License: MIT License
- class sproclib.unit.distillation.DistillationTray(tray_number=1, holdup=1.0, alpha=2.5, name='DistillationTray')[source]
Bases:
ProcessModelIndividual distillation tray model for binary systems.
- __init__(tray_number=1, holdup=1.0, alpha=2.5, name='DistillationTray')[source]
Initialize distillation tray.
- describe()[source]
Introspect metadata for documentation and algorithm querying.
- Returns:
- Metadata about the model including algorithms,
parameters, equations, and usage information.
- Return type:
- dynamics(t, x, u)[source]
Tray dynamics: component material balance.
State variables: x[0]: Liquid mole fraction of light component on tray
Input variables: u[0]: Liquid flow rate from tray above [kmol/min] u[1]: Liquid composition from tray above [mole fraction] u[2]: Vapor flow rate from tray below [kmol/min] u[3]: Vapor composition from tray below [mole fraction] u[4]: Liquid flow rate from this tray [kmol/min] u[5]: Vapor flow rate from this tray [kmol/min]
- Parameters:
t (float) – Time
x (<MagicMock id='130137681087520'>) – [x_tray] - liquid composition on tray
u (<MagicMock id='130137681087856'>) – [L_in, x_in, V_in, y_in, L_out, V_out]
- Returns:
[dx_tray/dt]
- Return type:
<MagicMock id=’130137681088192’>
- steady_state(u)[source]
Calculate steady-state composition.
For steady state: dx/dt = 0 Light_in = Light_out L_in * x_in + V_in * y_in = L_out * x + V_out * y
- Parameters:
u (<MagicMock id='130137681088528'>) – [L_in, x_in, V_in, y_in, L_out, V_out]
- Returns:
[x_tray_ss] - steady-state liquid composition
- Return type:
<MagicMock id=’130137681088864’>
- class sproclib.unit.distillation.BinaryDistillationColumn(N_trays=20, feed_tray=10, alpha=2.5, tray_holdup=1.0, reflux_drum_holdup=5.0, reboiler_holdup=10.0, feed_flow=100.0, feed_composition=0.5, name='BinaryDistillationColumn')[source]
Bases:
ProcessModelSimplified binary distillation column model for control design.
- Parameters:
- __init__(N_trays=20, feed_tray=10, alpha=2.5, tray_holdup=1.0, reflux_drum_holdup=5.0, reboiler_holdup=10.0, feed_flow=100.0, feed_composition=0.5, name='BinaryDistillationColumn')[source]
Initialize binary distillation column.
- Parameters:
N_trays (int) – Total number of trays (including reboiler, excluding condenser)
feed_tray (int) – Feed tray number (1 = top tray)
alpha (float) – Relative volatility (light/heavy) [-]
tray_holdup (float) – Liquid holdup per tray [kmol]
reflux_drum_holdup (float) – Reflux drum holdup [kmol]
reboiler_holdup (float) – Reboiler holdup [kmol]
feed_flow (float) – Feed flow rate [kmol/min]
feed_composition (float) – Feed composition (mole fraction light component)
name (str) – Model name
- describe()[source]
Introspect metadata for documentation and algorithm querying.
- Returns:
- Metadata about the model including algorithms,
parameters, equations, and usage information.
- Return type:
- dynamics(t, x, u)[source]
Column dynamics: material balances for all trays.
State variables: x[0:N_trays]: Liquid compositions on trays (light component) x[N_trays]: Reflux drum composition x[N_trays+1]: Reboiler composition
Input variables: u[0]: Reflux ratio [-] u[1]: Reboiler heat duty [energy/time] u[2]: Distillate flow rate [kmol/min] u[3]: Bottoms flow rate [kmol/min]
- Parameters:
t (float) – Time
x (<MagicMock id='130137681090880'>) – State vector [tray compositions, drum composition, reboiler composition]
u (<MagicMock id='130137681091216'>) – [R, Q_reboiler, D, B]
- Returns:
State derivatives
- Return type:
<MagicMock id=’130137681091552’>
- steady_state(u)[source]
Calculate steady-state with distillation column.
- Parameters:
u (<MagicMock id='130137681091888'>) – Input variables [R, Q_reboiler, D, B] - reflux ratio, heat duty, distillate, bottoms
- Returns:
Steady-state values
- Return type:
<MagicMock id=’130137681092224’>
Utilities
LinearApproximation module for SPROCLIB - Standard Process Control Library
This module imports the LinearApproximation class from LinearApproximation.py.
- class sproclib.unit.utilities.LinearApproximation(model)[source]
Bases:
objectLinear approximation of nonlinear process models.
- Parameters:
model (ProcessModel)
- __init__(model)[source]
Initialize linearization utility.
- Parameters:
model (ProcessModel) – Nonlinear process model to linearize
- linearize(u_ss, x_ss=None, epsilon=1e-06)[source]
Linearize model around operating point using finite differences.
- Parameters:
u_ss (<MagicMock id='130137682636016'>) – Steady-state inputs
x_ss (<MagicMock id='130137682635680'> | None) – Steady-state states (calculated if None)
epsilon (float) – Perturbation size for finite differences
- Returns:
A, B matrices for linear model dx/dt = A*x + B*u
- Return type:
Tuple[<MagicMock id=’130137682627952’>, <MagicMock id=’130137682629632’>]
- get_transfer_function(output_idx=0, input_idx=0, s_values=None)[source]
Get transfer function from linearized model.