Appendix I — Solving Algebraic/Transcendental Equations

This appendix examines the numerical solution of sets of algebraic/transcendental equations (ATEs). There are numerous software packages that include an ATE solver (function that solves a set of ATEs numerically). While the details differ from one software package to another, the vast majority of ATE solvers require the same input, use it the same way, and return equivalent results. The information provided here should be sufficient to understand the examples presented in Reaction Engineering Basics and to solve sets of ATEs using software of one’s choosing. Readers seeking a more complete understanding should consult a numerical methods reference book or take a course on numerical methods.

I.1 Identifying ATEs and Preparing to Solve Them Numerically

In Reaction Engineering Basics, almost any equation that does not contain an ordinary derivative or a partial derivative is likely an ATE. Slightly more specifically, a set of ATEs is a group of 1 or more mathematical equations that may involve or contain math operations (addition, subtraction, multiplication, and division), quantities raised to powers, and transcendental functions. Exponential functions are the most common transcendental functions appearing in the ATEs found in Reaction Engineering Basics. They arise any time an equation includes a rate coefficient that displays Arrhenius temperature dependence, Equation 4.8.

The quantities that may appear in a set of \(N\) ATEs can be classified as (a) known constants, (b) the ATE unknowns, and (c) other unknowns. If there are \(N\) ATEs in the set, then there must be \(N\) ATE unknowns. The ATE unknowns are the quantities that are found by solving the ATEs. In reaction engineering analyses, it often happens that unknowns other than the ATE unknowns also appear in a set of ATEs. Before the set of ATEs can be solved numerically, the values of these other unknowns must be calculated or provided as will be described subsequently.

In preparation for numerically solving a set of ATEs, each equations must be rearranged into the form of a residual expression. Doing so is trivially simple. If there is a zero on either side of the equals sign, no rearrangement is necessary. If not, everything on one side of the equals sign should be subtracted from both sides of the equation. This will result in an equation with a zero on one side of the equals sign. The nonzero side of that equation is called a residual. A residual expression is created by choosing a variable to represent the residual and setting it equal to the nonzero side of the equation. In Reaction Engineering Basics, \(\epsilon\) is usually used to represent residuals.

If a set of \(N\) ATEs is being solved, they must be converted into a set of \(N\) residual expressions. In general each residual can be a function of all of the ATE unknowns. Substitution of a set of ATE unknowns that solves the ATEs will cause all of the residuals to evaluate to zero. It should be noted that the ATEs may have multiple solutions.

I.2 ATE Solvers

An ATE solver is a computer function that solves a set of ATEs numerically. Typically, an ATE solver must be provided with two inputs. The first is an initial guess for the ATE unknowns. The second is a residuals function. The residuals function receives a set of values for the ATE unknowns and uses them to evaluate and return the corresponding values of the ATE residuals.

Effectively, the ATE solver uses the initial guess and residuals function to find a solution by trial and error.

  • It tests the initial guess by calling the residuals function and determining whether all of the ATE residuals equal zero.
  • If the initial guess does not solve the ATEs, the ATE solver generates an improved guess and tests that.
    • The improved guess will not be an exact solution (unless the ATEs are linear equations), but usually it will be closer to the solution than the previous guess.
  • The ATE solver keeps generating improved guesses and testing them until no further improvement is possible.
  • It then returns the final, most-improved guess as a solution of the ATEs.

I.2.1 The Initial Guess for the Unknowns

When an ATE solver is first called, it must be provided with an initial guess for the ATE unknowns. Providing an acceptable guess is not usually difficult. In reaction engineering analyses, the ATE unknowns have a physical meaning. That, together with a qualitative understanding of how the equipment being modeled functions, provides guidance for making an initial guess.

As an example, the reactor design equations for a steady-state CSTR are a set of ATEs. Most often the ATE unknowns include the outlet molar flow rates of the reagents, the outlet temperature of the reacting fluid, and sometimes, the outlet temperature of a heat exchange fluid. Knowing that the reaction will cause the amounts of reactants to decrease, one strategy is to guess that the outlet molar flow rate of each reactant is slightly smaller than its inlet molar flow rate. In many cases, the guess for the outlet molar flow rates of products can simply be guessed to equal zero. If the reaction taking place is exothermic the temperature will likely rise, so a temperature a few degrees above the inlet temperature can be guessed. If the reaction is endothermic, the guess would be a few degrees below the inlet temperature. Similarly, if the external fluid is heating the reactor, an outlet temperature a few degrees below the exchange fluid inlet temperature can be used (and vice versa if the external fluid is cooling the reactor). Because of the exponential temperature dependence in the Arrhenius expression, the residuals are often more sensitive to the temperature guesses.

I.2.2 The Residuals Function

The purpose of the residuals function is to evaluate the residuals, given a guess for the ATE unknowns. The engineer solving the ATEs must write the residuals function, but because it will be called by the ATE solver, the arguments to it, the values it returns and their formats are all specified by the ATE solver (or the mathematics software package that provides the solver). While the arguments to the response function always include an initial guess for the ATE unknowns and the return value always include the corresponding values of the ATE residuals, the mathematics software package specifies the details (e. g. are the guesses for the ATE unknowns passed as individual arguments or are they combined into a vector, etc.). The engineer calling the ATE solver must write the residuals function so it conforms to those specifications.

The calculations performed within the residuals function are straightforward. Values for the ATE unknowns are passed to it, and known constants are available. Therefore the only thing that the residuals function needs to do before it can evaluate the residuals is to calculate any other unknowns that appear in the ATEs. If it is not possible to calculate these other unknows within the residuals function, they must be provided to it.

Providing unknown constants to the residuals function forces a computer programming choice that won’t be discussed here. Because the other unknowns cannot be passed to the residuals function as arguments, they need to be made available to the residuals function by other means. The documentation for the mathematics software package may suggest a preferred way to do this such as by using a global variable or by using a pass-through function. Once the other constants are calculated or made available, all that remains to be done within the residuals function is to evaluate the ATE residuals and return the results.

I.2.3 Convergence and Solver Issues

The numerical solution of a set of ATEs is an iterative process as described at the start of this section. Ideally, the ATE residuals should get closer and closer to zero with each iteration. This is called convergence to a solution. Typically, the solution returned by the solver will not be exact, but it will be “very close” to the exact solution. Put differently, when a converged solution is found, the difference between the solution returned by the solver and the exact solution is negligible.

Sometimes the solver is unable to converge to the point where the residuals are “very close” to zero. In this situation, the solver eventually has to quit without finding a converged solution. Typically it will print an error message or return a flag variable, and that variable will indicate whether or not a converged solution was obtained.

When the ATE solver is not able to converge to a solution, it is often because the guess provided to the solver wasn’t close enough to a solution. The remedy then, is to make a different initial guess and try again to solve the ATEs. Examining the ATE residuals can sometimes help in making a new initial guess. For example, if all of the residuals are large negative numbers, that may suggest how to change the initial guess so that the ATE residuals become less negative (or even slightly positive) and closer to zero.

A singularity in one or more of the residuals could also prevent the ATE solver from converging. One type of singularity can arise if one or more residual functions have a denominator that contains an ATE unknown. As the solver iterates, it may generate an improved guess that causes such denominators to approach zero. Of course this then causes the residual to approach infinity.

The manner in which ATE design equations are formulated in Reaction Engineering Basics may not make singularities of this kind apparent. Fortunately, in most situations, the solver can be made to converge by refining the initial guess. Alternatively, by substituting expressions for all unknowns that appear in the ATEs other than the ones to be found by solving the ATEs, any fractions with denominators containing ATE unknowns will become apparent. Multiplying both sides of that form of the ATE by each denominator will yield alternative residuals expressions where the singularities have been removed.

Finally, as already noted, sets of ATEs can have more than one solution. For example, a quadratic polynomial has two solutions. If a set of ATEs has multiple solutions, most ATE solvers will only find one of them. To find other solutions, the solver should be called again using a different initial guess.

I.3 Mathematical Formulation of the Numerical Solution of a Set of ATEs

Once the ATEs and the ATE unknowns have been identified, the numerical solution can be formulated. The solver requires an initial guess for the solution and a residuals function, so the formulation will begin with those two things. Guessing the solution has already been discussed. The formulation should include equations that can be used to calculate the initial guess. Typically these equations will be assignment statements or very simple calculations.

The formulation should also include the specification of an ATE residuals function. The ATE residuals function specification should list the arguments to be passed to it (values of the ATE unknowns), the quantities it will return (the corresponding ATE residuals), and any other unknowns that must be provided to it. It should also include the algorithm, i. e. the sequence of calculations needed to evaluate the residuals.

The remainder of the formulation entails specifying a function for solving the ATEs. Very often this is a reactor function. The specification should include arguments passed to the function, values returned by it, and the algorithm for calculating the return values. The engineer can choose whatever arguments are needed for this function, so it won’t be necessary to make other unknowns available to it. Typically this function will return one set of values of the ATE unknowns that solve the ATEs. As noted, there might be other sets of ATE unknowns that also solve the ATEs.

The algorithm begins with the calculation of an initial guess for the values of the ATE unknowns. If quantities that can’t be passed as arguments need be provided to the residuals function, making those quantities available to the residuals function should be the next step in the algorithm. Once that has been accomplished, all that remains is to call the solver. The arguments passed to it will be the name of the ATE residuals function and the guess for the ATE unknowns. The values that will be returned by the solver should be identified. Typically they are then returned by the reactor function. While not necessarily part of the mathematical formulation, the actual computer code should next check that the solver did converge and print some kind of warning if it did not.

I.4 Example

The following example describes the mathematical formulation of a set of ATEs in considerable detail. Elsewhere in Reaction Engineering Basics the formulation of the solution of a set of ATEs will be more succinct. A condensed version of the discussion presented here will be made available in the form of callouts that say “Click Here to See What an Expert Might be Thinking at this Point”. Clicking on that text will expand the callout making the discussion visible.

I.4.1 Solution of a Set of ATEs

A reaction engineer is simulating an ideal, steady-state CSTR. The reactor design equations have been simplified as shown in equations (1) through (5). In those equations, the rate, \(r\), is given by equation (6), wherein \(k\), \(C_A\), and \(C_B\) can be calculated using equations (7) through (9). \(\dot{V}\), \(C_{A,0}\), \(V\), \(C_{B,0}\), \(\rho\), \(\tilde{C}_p\), \(T_0\), \(\Delta H\), \(k_0\), and \(E\) are known constants. Formulate a CSTR model to solve the design equations for \(\dot{n}_{A,1}\), \(\dot{n}_{B,1}\), \(\dot{n}_{Y,1}\), \(\dot{n}_{Z,1}\), and \(T_1\).

\[ \dot{V}C_{A,0} = \dot{n}_{A,1} + rV \tag{1} \]

\[ \dot{V}C_{B,0} = \dot{n}_{B,1} + rV \tag{2} \]

\[ \dot{n}_{Y,1} = rV \tag{3} \]

\[ \dot{n}_{Z,1} = rV \tag{4} \]

\[ 0 = \rho\dot{V}\tilde{C}_p\left(T_1 - T_0\right) + rV\Delta H \tag{5} \]

\[ r = kC_AC_B \tag{6} \]

\[ k = k_0 \exp{\left(\frac{-E}{RT_1}\right)} \tag{7} \]

\[ C_A = \left(\frac{\dot{n}_{A,1}}{\dot{V}}\right) \tag{8} \]

\[ C_B = \left(\frac{\dot{n}_{B,1}}{\dot{V}}\right) \tag{9} \]

Known Constants in Consistent Units: \(\dot{V}\) = 75, \(C_{A,0}\) = 1.0, \(V\) = 50, \(C_{B,0}\) = 1.2, \(\rho\) = 1.0 x 103, \(\tilde{C}_p\) = 1.0, \(T_0\) = 303, \(\Delta H\) = -10,700, \(k_0\) = 8.72 x 105, \(E\) = 7,200, \(\Delta H\), and \(R\) = 1.987.


Note

The assignment narrative identifies equations (1) through (5) as the ATEs to be solved and \(\dot{n}_{A,1}\), \(\dot{n}_{B,1}\), \(\dot{n}_{Y,1}\), \(\dot{n}_{Z,1}\), and \(T_1\) as the ATE unknowns. That makes the rate, \(r\), an additional or other unknown. The defining equation for the rate then introduces \(k\), \(C_A\), and \(C_B\), which are also other unknowns.

This is typical of the way ATEs are formulated in Reaction Engineering Basics. As a consequence, the other unknowns, \(r\), \(k\), \(C_A\), and \(C_B\), must be calculated within residuals function before the residuals can be evaluated. If any of them can’t be calculated within the residuals function, they need to be made available to it by some other means because they can’t be passed to it as arguments.

An alternative way to formulate the solution would be to use equations (1) through (9) as the ATEs and \(\dot{n}_{A,1}\), \(\dot{n}_{B,1}\), \(\dot{n}_{Y,1}\), \(\dot{n}_{Z,1}\), \(T_1\), \(r\), \(k\), \(C_A\), and \(C_B\) as the ATE unknowns. With this formulation, there wouldn’t be any other unknowns, but it would be necessary to provide nine initial guesses instead of five.

The reactor design equations have already been formulated, so the next thing that needs to be done is to identify what type of equations they are. Equations (1) through (5) do not contain ordinary or partial derivatives. They only contain simple mathematical operations. The rate, \(r\), appearing in the equations contains a rate coefficient which includes a transcendental function, specifically an exponential function, but not none of the equations contain derivatives. This identifies the design equations as ATEs.

When the design equations are a set of ATEs, the reactor model will have four components: the design equations, a guess for the solution, a residuals function, and a reactor function. Hence, the formulation of the CSTR model begins with a listing of the reactor design equations. They should be written in the form of residual expressions.

In this assignment it wasn’t necessary to generate the design equations, they were presented in the assignment narrative, but in preparation for solving them, they need to be rearranged into the form of residual expressions. Doing so is trivial. If one side of the ATE is a zero, no rearrangement is necessary. Otherwise, simply subtract one side of the ATE from both sides of the equation. This will cause one side of the equation to become zero. The nonzero side is called a residual. To write the equations as residual expression, simply choose a variable to represent the residual and set it equal to the nonzero side of the equation. In Reaction Engineering Basics, \(\epsilon\) is usually used to represent residuals. The ATE residuals expressions for this assignment then are given by equations (10) through (14).

\[ \epsilon_1 = \dot{V}C_{A,0} - \dot{n}_{A,1} - rV = 0 \tag{10} \]

\[ \epsilon_2 = \dot{V}C_{B,0} - \dot{n}_{B,1} - rV = 0 \tag{11} \]

\[ \epsilon_3 = - \dot{n}_{Y,1} + rV = 0 \tag{12} \]

\[ \epsilon_4 = - \dot{n}_{Z,1} + rV = 0 \tag{13} \]

\[ \epsilon_5 = \rho\dot{V}\tilde{C}_p\left(T_1 - T_0\right) + rV\Delta H = 0 \tag{14} \]

Often times the number of unknowns in the ATEs is greater than the number of ATEs, and the reaction engineer must decide which of the unknowns will be found by solving the ATEs. The present assignment narrative has already done that, indicating that \(\dot{n}_{A,1}\), \(\dot{n}_{B,1}\), \(\dot{n}_{Y,1}\), \(\dot{n}_{Z,1}\), and \(T_1\) are the ATE unknowns.

The reactor design equations will be solved numerically using an ATE solver. The solver must be provided with a guess for the solution and a residuals function. Thus, the second component of this CSTR model will be guesses for the ATE unknowns. Generating an initial guess for the solution is not difficult.

The design equations presented in this assignment were taken out of context and without describing the notation being used. The reaction engineer who formulated them used a subscripted “0” on a molar flow rate or temperature to denote the reactor inlet and a “1” to denote the reactor outlet. So the ATE unknowns are all reactor outlet quantities. The engineer would have determined that the inlet molar flow rates of A and B equal \(\dot{V}C_{A,0}\) and \(\dot{V}C_{B,0}\), respectively, the inlet molar flow rates of Y and Z are zero, and the inlet temperature is \(T_0\). Using the guessing strategy described in this appendix, the engineer might guess that 90% of the A and B remain at the reactor outlet, equations (15) and (16), that there isn’t any Y or Z at the outlet, equations (17) and (18), and (because the reaction is exothermic) that the outlet temperature is 5 K greater than the inlet, equation (19).

\[ \dot{n}_{A,1,guess} = 0.9\dot{V}C_{A,0} \tag{15} \]

\[ \dot{n}_{B,1,guess} = 0.9\dot{V}C_{B,0} \tag{16} \]

\[ \dot{n}_{Y,1,guess} = 0.0 \tag{17} \]

\[ \dot{n}_{Z,1,guess} = 0.0 \tag{18} \]

\[ T_{1,guess} = T_0 + 5.0 \tag{19} \]

Note

The critical aspect of the guesses is that they must be “good enough” for the solver to converge to the solution. One strategy is to guess that not much reaction occurs in the reactor, as the engineer did here. A different reaction engineer might have used different guesses. It is worth mentioning that the guesses do not need to be stoichiometrically consistent, as is the case here. If 10% of the A reacted, then there would be some Y and Z at the outlet, but the guess here was no Y or Z at the outlet. If the solver converges, the solution it finds will be stoichiometrically consistent, but if the solver does not converge, the guess will need to be improved.

As noted above, if the design equations are going to be solved using an ATE solver, the solver must also be provided with a residuals function. Thus, the third component of the CSTR model is a specification of the residuals function. The purpose of the residuals function is to take a set of ATE unknowns and use them to evaluate the design equation residuals. In Reaction Engineering Basics, it is always assumed that all of the constants provided in the assignment narrative are available to all functions, including the residuals function.

The residuals function specification should indicate the arguments passed to it, the quantities it returns, any additional quantities that must be made available to it, and the sequence of calculations it must perform to calculate the return values (i. e. the design equation residuals). The arguments are always a set of values for the ATE unknowns (here, \(\dot{n}_{A,1}\), \(\dot{n}_{B,1}\), \(\dot{n}_{Y,1}\), \(\dot{n}_{Z,1}\), and \(T_1\)), and the return values are always the corresponding set of design equation residuals (here, \(\epsilon_1\), \(\epsilon_2\), \(\epsilon_3\), \(\epsilon_4\), and \(\epsilon_5\)). In this assignment, no other inputs need to be made available to the residuals function.

The sequence of calculations that needs to be performed by the residuals function, i. e. the algorithm, begins with calculation of the rate coefficient and concentrations of A and B can be calculated using equations (7) through (9). The rate then can be calculated using equation (6). Finally, the residuals can be evaluated, using equations (10) through (14).

That completes the first three components of the reactor model: the design equations, the initial guess and specification of the residuals function. The final model component is a reactor function. It is the reactor function that actually calls the ATE solver. The specification of the reactor function is similar to the specification of the residuals function, except there won’t ever be a need to provide values by means other than as arguments.

The engineer must write the CSTR function, and since it won’t be called by the ATE solver, the engineer can decide what arguments it should accept and what it will return. In this assignment, there isn’t anything that needs to be passed to the CSTR function. Its purpose is to calculate the ATE unknowns, so those are the quantities it should return.

The CSTR function algorithm is straightforward. To start, the guess is calculated. If any quantities needed to be made available to the residuals function, that would be taken care of next, but in this example that isn’t necessary. It can call the ATE solver to get one set of ATE unknowns that solve the design equations, returning the results.

A succinct formulation of the CSTR model follows. It assumes that the given and known constants identified in the assignment summary are available at any point in the analysis.

CSTR Model

Design Equations

\[ \epsilon_1 = \dot{V}C_{A,0} - \dot{n}_{A,1} - rV = 0 \tag{10} \]

\[ \epsilon_2 = \dot{V}C_{B,0} - \dot{n}_{B,1} - rV = 0 \tag{11} \]

\[ \epsilon_3 = - \dot{n}_{Y,1} + rV = 0 \tag{12} \]

\[ \epsilon_4 = - \dot{n}_{Z,1} + rV = 0 \tag{13} \]

\[ \epsilon_5 = \rho\dot{V}\tilde{C}_p\left(T_1 - T_0\right) + rV\Delta H = 0 \tag{14} \]

Initial Guess for \(\dot{n}_{A,1}\), \(\dot{n}_{B,1}\), \(\dot{n}_{Y,1}\), \(\dot{n}_{Z,1}\), and \(T_1\):

\[ \dot{n}_{A,1,guess} = 0.9\dot{V}C_{A,0} \tag{15} \]

\[ \dot{n}_{B,1,guess} = 0.9\dot{V}C_{B,0} \tag{16} \]

\[ \dot{n}_{Y,1,guess} = 0.0 \tag{17} \]

\[ \dot{n}_{Z,1,guess} = 0.0 \tag{18} \]

\[ T_{1,guess} = T_0 + 5.0 \tag{19} \]

Residuals Function:

Arguments: \(\dot{n}_{A,1}\), \(\dot{n}_{B,1}\), \(\dot{n}_{Y,1}\), \(\dot{n}_{Z,1}\), and ,\(T_1\).

Returns: \(\epsilon_1\), \(\epsilon_2\), \(\epsilon_3\), \(\epsilon_4\), and \(\epsilon_5\)

Algorithm:

\[ k = k_0 \exp{\left(\frac{-E}{RT_1}\right)} \tag{7} \]

\[ C_A = \left(\frac{\dot{n}_{A,1}}{\dot{V}}\right) \tag{8} \]

\[ C_B = \left(\frac{\dot{n}_{B,1}}{\dot{V}}\right) \tag{9} \]

\[ r = kC_AC_B \tag{6} \]

\[ \epsilon_1 = \dot{V}C_{A,0} - \dot{n}_{A,1} - rV = 0 \tag{10} \]

\[ \epsilon_2 = \dot{V}C_{B,0} - \dot{n}_{B,1} - rV = 0 \tag{11} \]

\[ \epsilon_3 = - \dot{n}_{Y,1} + rV = 0 \tag{12} \]

\[ \epsilon_4 = - \dot{n}_{Z,1} + rV = 0 \tag{13} \]

\[ \epsilon_5 = \rho\dot{V}\tilde{C}_p\left(T_1 - T_0\right) + rV\Delta H = 0 \tag{14} \]

CSTR Function:

Arguments: none.

Returns: \(\dot{n}_{A,1}\), \(\dot{n}_{B,1}\), \(\dot{n}_{Y,1}\), \(\dot{n}_{Z,1}\), and ,\(T_1\).

Algorithm:

\[ \dot{n}_{A,1,guess} = 0.9\dot{V}C_{A,0} \tag{15} \]

\[ \dot{n}_{B,1,guess} = 0.9\dot{V}C_{B,0} \tag{16} \]

\[ \dot{n}_{Y,1,guess} = 0.0 \tag{17} \]

\[ \dot{n}_{Z,1,guess} = 0.0 \tag{18} \]

\[ T_{1,guess} = T_0 + 5.0 \tag{19} \]

 

\[ \begin{matrix} \dot{n}_{A,1,guess}, \dot{n}_{B,1,guess}, \dot{n}_{Y,1,guess}, \dot{n}_{Z,1,guess}, T_{1,guess}, \text{Residuals Function} \\ \Downarrow \\ \text{ATE Solver} \\ \Downarrow \\ \dot{n}_{A,1}, \dot{n}_{B,1}, \dot{n}_{Y,1}, \dot{n}_{Z,1}, T_1 \end{matrix} \tag{15} \]

I.4.1.1 Results, Analysis and Discussion

A computer code was written to implement the CSTR model as formulated above, Specifically the residuals function and the CSTR function were created using a mathematics software package that included an ATE solver. The residuals function arguments and their formatting were implemented according to the specifications of that software package, as were the values it returns.

Additional code was written to call the CSTR function, display the results, and save the results to a file. The results were as follows: \(\dot{n}_{A,1}\) = 21.8, \(\dot{n}_{B,1}\) = 36.8, \(\dot{n}_{Y,1}\) = 53.2, \(\dot{n}_{Z,1}\) = 53.2, and \(T_1\) = 310.6. Knowing that there might be other solutions, the code was run again using different guesses, but it always converged to this solution. That doesn’t mean additional solutions don’t exist, but if these results make sense physically, the engineer could have some confidence in accepting them.

I.5 Symbols Used in Appendix I

Symbol Meaning
\(k\) Rate coefficient.
\(k_0\) Arrhenius pre-exponential factor.
\(\dot n_i\) Molar flow rate of reagent \(i\); an additional subscripted \(0\) denotes the inlet molar flow rate or a subscripted \(1\), the outlet molar flow rate.
\(r\) Rate of reaction.
\(C_i\) Molar concentration of reagent \(i\), an additional subscripted 0 denotes the reactor inlet and 1 denotes the outlet.
\(\tilde{C}_p\) Gravimetric heat capacity.
\(E\) Activation energy.
\(N\) Number of ATEs being solved and number of ATE unknowns being found.
\(T\) Temperature, a subscripted 0 denotes the reactor inlet and 1 denotes the outlet.
\(V\) Volume of reacting fluid.
\(\dot{V}\) Volumetric flow rate.
\(\epsilon_i\) Residual for the \(i^{th}\) ATE.
\(\rho\) Density.
\(\Delta H\) Heat of reaction.