Kramers' model

using WallyToolbox

using CairoMakie
using CSV
using DataFrames
using Latexify
using Printf

Reference data

Below we provide a set of partial data from Kramers (1952) Table 3.

const DATA_TABLE3 = """\
ρ,γ,tan(β),n,ṁ,prod_dimless,η̄ᵣ,hold_real
1480.0,36.0,0.0094,0.059,5.15e-03,18.3,0.111,8.10
1480.0,36.0,0.0094,0.090,2.68e-03,6.25,0.054,5.00
1480.0,36.0,0.0094,0.195,1.32e-02,14.2,0.088,7.75
1480.0,36.0,0.0094,0.232,7.24e-03,6.55,0.043,3.85
1480.0,36.0,0.0100,0.040,6.38e-03,29.7,0.169,13.3
1480.0,36.0,0.0100,0.040,5.00e-03,23.2,0.144,11.2
1480.0,36.0,0.0100,0.069,9.20e-03,24.8,0.150,10.6
1480.0,36.0,0.0100,0.069,6.53e-03,17.6,0.113,8.50
1480.0,36.0,0.0100,0.106,1.50e-02,27.8,0.162,12.2
1480.0,36.0,0.0100,0.159,1.20e-02,14.0,0.092,7.49
1480.0,36.0,0.0100,0.238,1.55e-02,12.1,0.083,7.48
1480.0,36.0,0.0100,0.238,1.19e-02,9.22,0.068,6.13
"""

******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit https://github.com/coin-or/Ipopt
******************************************************************************

Sample reference case

Here we make use of the current implementation to check if it correctly approximates the last example provided in reference paper from [[@Kramers1952]]. To minimize rounding errors causes by unit conversions, we provide the required functions to convert from imperial to international system in the solution process.

The next table summarizes the results. It is seen that the dimensionless numbers are well approximated. It must be emphasized that the reference estimates η̄ᵣ by a graphical method – it was 1952 – and the current value is considered a good enough approximation. Additionally, the equation was not integrated numerically as done here, but engineering relationships were used in the approximation. That said, the proper loading to be considered in our days is η̄ᵢ.

4×3 DataFrame
RowQuantityReferenceComputed
StringStringString
11.151.15
2Nₖ1.171.17
3η̄ᵣ5.655.46
4η̄ᵢ4.995.91

Note: the last value in column Reference above is not provided in Kramers' paper but computed from the approximate analytical solution provided by the authors. As we see here, it may get >20% error under some circumstances.

Verification of Table 3

In the next cell we provide the kiln dimensions used by Kramers (1952) to experimentally validate the model. Some data from their Tab. 3 is then loaded and all rows are simulated with current model. Fractional hold-up seems to be well correlated at least to a few percent of the reference value.

12×5 DataFrame
Rowtan(β)nη̄ᵣη̄ᵢ
Float64Float64Float64Float64Float64
10.00940.0590.0051511.110.8
20.00940.090.002685.44.7
30.00940.1950.01328.88.9
40.00940.2320.007244.34.8
50.010.040.0063816.916.8
60.010.040.00514.413.9
70.010.0690.009215.014.6
80.010.0690.0065311.311.3
90.010.1060.01516.215.3
100.010.1590.0129.29.5
110.010.2380.01558.38.4
120.010.2380.01196.86.9

Dimensionless profiles

Next step in validation is to check profiles in dimensionless format, as done by Kramers in their Fig. 3. Notice that here we used the numerical integration curves instead of the analytical approximation of profiles, so reproduction and consequences of results are not exactly the same.

Comparison with analytical

The final step in model validation is to compare the approximate analytical solution proposed by Kramers and the results of numerical integration. It is worth mentioning that numerical integration remains the recommended method because one does not need to verify the ranges of validity of analytical approximation for every use case.

Industrial cases

The following illustrates a practical use case of the model. Next we scan a parameter space to confirm once again the model suitability as an alternative to analytical engineering estimations as per Perry's .

The following table confirms the expected values as per Perry's handbook.

4×5 DataFrame
Rowωη̄τᵢτₚ
Float64Float64Float64Float64Float64
133.60.8510.0203.0203.0
233.61.27.0141.0144.0
343.20.8513.0207.0203.0
443.21.29.0143.0144.0