where \(C\) and \(C_{F}\) are the outlet and feed concentrations in mg mL-1, respectively, erf is the error function, \(x\) is the loaded mass in mg per mL resin, \(k_{s}\) is the binding capacity in mg per mL resin, and \(\sigma\) is an empirical dimensionless constant.
New yields were obtained with this model with the same amount of adsorbed product as in the original scenario with 100% capacity. In other words, we studied how the yield was affected by reduced binding capacity at constant amount of adsorbed product in the capture step. Loss of binding capacity does not affect the yield for low load volumes (see Figure 4), but the yield decreases at load volumes of 35 and 45 mL for the 80% and 90% capacity scenarios, respectively. It is not possible to obtain the same amount of adsorbed product in these scenarios with capacity loss by loading more product, which is why yields are not shown in these cases at higher load volumes. For example, at a load volume of 40 mL, where the resin utilization is around 83%, it would not be possible to maintain the amount of adsorbed product if the capacity decreased 20%, as the maximum attainable amount of adsorbed product would be 80% of the original resin capacity, but the desired amount would be 83% of the original resin capacity.
The design criterion was to maintain product output with the loading controller while taking a loss of resin capacity into account. Thus, the feasible load volumes are those that are lower than 35 or 45 mL, depending on whether a capacity loss of 20% or 10% is assumed, to ensure constant amount of adsorbed product in the capture step and therefore constant product output. A 10% loss in resin capacity was assumed in this study in the design of the PCC operation. The load volume was therefore set at 45 mL, which corresponds to a cycle load volume of 36 mL. The cycle time is then 95 min with a load flow rate of 0.38 mL min-1. This fulfills the constraint of the minimum cycle time, which was 79 min.

Continuous virus inactivation

In the downstream process we used previously (Löfgren et al., 2018), virus inactivation was performed at low pH after the capture step. In the present study, it was performed before the capture step to allow continuous flow through the virus inactivation reactor, as the inlet stream to the capture step is continuous, but not the outlet stream. Since the input to the capture column must have neutral pH, virus inactivation at low pH would involve two subsequent dilution steps to decrease and then increase the pH. This would require an extra pump and an extra mixer, and the total volume to be treated by the capture column would be higher. For this reason, solvent/detergent virus inactivation, based on the process presented by Martins et al. (2019), was used instead. Performing virus inactivation before the capture step allowed the detergent to be removed from the product in two consecutive steps.
The continuous virus inactivation reactor was designed to ensure a minimum product residence time of 60 min. The mean residence time is given by dividing the void volume by the flow rate. The design void volume was calculated by multiplying the residence time by the loading flow rate (0.38 mL min-1) and adding an extra 20% to account for dispersion. The void fraction was assumed to be 0.36, as estimated by de Klerk (2003) for a packed bed with a high column to particle diameter ratio. Then, the total reactor volume was 76.0 mL, and the height was 378 mm. An experiment was run with supernatant to check the residence time distribution and validate the design. It was found that 99.8% of the product remained in the reactor for more than 60 min, which is higher than the 99% suggested by Martins et al. (2019). The mean residence time was 75.5 min, and the ratio between the residence times at 50% and 1% of the cumulative residence time distribution curves was 1.16; 1 being the ideal value, i.e. equal residence time for all the molecules. This value is similar to that obtained by Martins et al. (2019) in a small-scale packed-bed reactor. A portion of the product (4%) resided in the reactor for more than 100 min. In low-pH virus inactivation, such a long residence time could have led to the risk of the formation of aggregates; however, such a risk has not been reported in a solvent/detergent virus inactivation process.

Column design

The column design was based on the approach described by us previously (Gomis-Fons et al., 2019), where it was shown that several constraints must be fulfilled for the integration of the columns. One of these is related to the column capacities, i.e., the polishing column must have sufficient capacity to handle the product eluted from the capture column. As it was desirable to keep the scale of the process as small as possible, the capture column volume was set to the minimum possible, 1 mL, and the polishing column volume was calculated based on its capacity and the amount of product per cycle. The concentration of the supernatant diluted with the detergent was 0.74 mg mL-1, and the volume loaded in a column was 45 mL, as mentioned above. Therefore, the maximum amount of product loaded on the polishing column per cycle was 33.3 mg. The capacity of that column was approximately 10 mg per mL column, thus leading to a minimum column volume of 3.3 mL. Due to the limited availability of volumes in prepacked columns, a 5 mL column was chosen.
Another constraint that must fulfilled for the successful integration of the columns is related to the residence times, i.e., the residence time in the columns must be equal to, or longer than, a certain reference value in each phase, which, in this case, was obtained from our previous study (Löfgren et al., 2018). Therefore, the residence time was set equal to the reference value in all the phases, except for the loading phase of the polishing step. In this phase, the flow rate, which is directly related to the residence time, is given by the flow rate in the elution phase of the capture step (0.55 mL min-1) plus the flow rate of the conditioning stream (0.88 mL min-1). The load flow rate was thus 1.43 mL min-1, and the residence time was 3.5 min, which was longer than the reference value for this phase, of 2 min.

Process control

Control software

The ÄKTA pure systems were controlled by external software called Orbit (Nilsson et al., 2017). The software is written in the general-purpose, object-oriented scripting language Python 3.7. Orbit sends instructions to UNICORN sequentially, and UNICORN forwards them to the ÄKTA system. Separate Orbit programs were used for each system. Synchronization between and within the systems was achieved through event flags. For example, the system in which the polishing step is performed sends a flag when this column is ready to be loaded, and the other system sends another flag when the elution phase is about to start in the capture step; the elution phase starts when both systems have sent their respective flags. (Further details on the control of multi-system setups by Orbit can be found in Gomis-Fons, Andersson, et al., 2020). The control strategies were implemented in the Orbit programs, for which process data, such as the cycle load volume or the UV absorbance, was monitored online.

Loading control

As the feed concentration and flow rate from a bioreactor can vary over time, a real-time iterative learning controller was implemented to adapt the system to these changes (Figure 5). The aim was that the same amount of product would be purified in the downstream process for every PCC cycle, i.e. to maintain a constant product output. The cycle load volume was modified to control the amount of product purified in a cycle. For example, if the concentration was lower than the nominal value used in the design, the product output would be lower. In order to correct for this, the volume loaded onto the capture step would be increased by extending the PCC cycle, so that the product output became higher in the next cycle. The control software Orbit tracked the loading flow rate, which allowed obtaining the right PCC cycle time to achieve the desired cycle load volume.
Iterative learning control is an approach to minimize the difference between the desired value and the measured value in systems that operate in a repetitive mode (Longman, 2000). Control was based on the so-called previous cycle learning scheme (Ouyang & Pipatpaibul, 2010; Xu, Heng Lee, & Zhang, 2004), since only the signals from the previous iteration are used to obtain the control signal for the next iteration (see Figure 5). A learning control law was used to update the control signal, as shown in Eq. (2). In this learning control law, the control signal at iteration \(k\) (\(u_{k}\)) depends on the control signal at the previous iteration (\(u_{k-1}\)), the tracking error between the reference (\(y_{\text{ref}}\)) and the output signal at the previous iteration (\(y_{k-1}\)), and the controller gain (\(K\)).