Drummers

Kramers equation

Kramers equation [6] describes the slope of bed height $h$ over rotary kiln axis $z$, with discharge being given at $z=0$ where initial condition of granule size is expected to be provided. It accounts for rotation speed $\omega$, volumetric flow rate $\Phi_v$, kiln inclination angle $\alpha$, kiln internal radius $R$, and solids dynamic repose angle $\beta$. In Auchimiste its implementation is done by DrumMediumKramersChunk and is decomposed as provided in the following equation:

\[\begin{align*} \frac{dh}{dz} &= A\left(2r-r^2\right)^{-\frac{3}{2}} - B \\[6pt] % A &= \frac{3}{4}\frac{\Phi_{v}\tan{\beta}}{\omega\pi{}R^3} \\[6pt] % B &= \frac{\tan{\alpha}}{\cos{\beta}} \\[6pt] % r &= \frac{h}{R} \end{align*}\]

Because thermal effects may impact solids dynamic repose angle $\beta$, it can be provided as a function of coordinate $z$ (it is expected the user has solved the thermal model elsewhere and solution can be retrieved in terms of this coordinate); the same applies to volumetric flow $\Phi_v$. For modeling transitions of radius, $R$ is also to be provided as a function of $z$, but that must be done with care to provide a suitable discretization that is compatible with the provided transitions.

AuChimiste.DrumMediumKramersChunkType
DrumMediumKramersChunk(; kwargs...)

Represents a chunk of a rotary drum bed model with Kramers equation.

Fields

  • model::ModelingToolkit.ODESystem: Instance of ODE system to be solved.
source

Raw results of Kramers equation [6] integration are rarely useful without further processing. To this end a post-processing type DrumMediumKramersSolution is provided, putting together most quantities of practical use those required to provide the geometry of a bed inside a kiln for process simulation.

The bed view angle $\theta$ from kiln axis is computed as

\[\theta = 2\cos^{-1}\left(1 - \dfrac{h}{R}\right)\]

With its value at hand one can compute the local bed chord length $l_{c}$

\[l_{c} = 2R\sin\left(\dfrac{\theta}{2}\right)\]

From geometric consideration one shows that bed cross-section area $A_{b}$ is

\[A_{s} = \dfrac{\theta R^2 - l_{c}(R - h)}{2}\]

Local fractional loading $\eta$ can be demonstrated to be

\[\eta = \dfrac{\theta - \sin(\theta)}{2\pi}\]

Mean loading $\Eta$ is simply an application of the fundamental theorem of Calculus for $\eta$ over kiln length $L$

\[\Eta = \dfrac{1}{L}\displaystyle\int_{0}^{L}\eta {}dz\]

Since the model does not assume conservation of $\Phi_{v}$, residence time $\tau$ needs to be evaluated from local mean drift-velocity $v_{d}$; it is trivial to show that in interval $z\in[z_1;z_2]$ the residence is given as

\[\tau = \displaystyle\int_{z_1}^{z_2}\dfrac{dz}{v_{d}} \quad\text{where}\quad v_{d} = \dfrac{A_{b}}{\Phi_{v}}\]

AuChimiste.DrumMediumKramersSolutionType

Geometric description of a rotary drum bed from Kramers equation solution.

Fields

  • z::Vector{Float64}: Solution coordinates [m]

  • h::Vector{Float64}: Solution bed height [m]

  • R::Vector{Float64}: Internal drum radius [m]

  • β::Vector{Float64}: Local dynamic repose angle [rad]

  • ϕ::Vector{Float64}: Local volume flow rate [m³/s]

  • θ::Vector{Float64}: View angle from drum center [rad]

  • l::Vector{Float64}: Bed-freeboard cord length [m]

  • A::Vector{Float64}: Local bed cross section area [m²]

  • η::Vector{Float64}: Local loading based on height [-]

  • τ::Vector{Float64}: Cumulative residence time of [s]

  • Η::Float64: Mean loading of kiln [%]

source

Integration of the model can be done directly with Common.solve interface for single chunks (kilns without user-defined discretization) or with solve_kramers_stack.

AuChimiste.solve_kramers_stackFunction
solve_kramers_stack(; kwargs...)

Solves a rotary drum bed model with Kramers equation in a stack of chunks. The minimum set of parameters are the following:

  • grid: grid of coordinates given in meters; this must include both the start and end points of the drum bed.

  • radius: radius of the drum in meters as a function of the coordinate z; no checks are performed with respect to grid consistency.

  • beta: local dynamic repose angle in radians as a function of the coordinate z; this is expected to handle the effects of temperaraure and moisture as treated by an external model.

  • phiv: volumetric flow rate in cubic meters per second as a function of the coordinate z; this is expected to handle the effects of temperature and moisture as treated by an external model.

  • h: initial bed height in meters at discharge position z=0.

  • ω̇: angular velocity of the drum in radians per second.

  • α: drum inclination angle in radians.

Keyword arguments are provided to Common.solve implementation for the solution of DrumMediumKramersChunk.

source
CommonSolve.solveMethod
CommonSolve.solve(chunk::DrumMediumKramersChunk; kwargs...)

Provide the integration of DrumMediumKramersChunk by creating a problem (ODEProblem) and the base Common.solve implementation. The keyword arguments must include:

  • zspan: a tuple indicating the initial and final coordinates in meters of the interval of integration for the present drum chunk.

  • h: initial (discharge) bed height in meters. If the discharge end is held by a dam, its height plus the particle size must be provided instead of the particle size, as it is used as the ODE initial condition.

  • ω̇: drum rotation rate in revolutions per second.

  • α: drum inclination angle in radians.

  • solver: solver to be used, defaults to Tsit5().

Other arguments provided to Common.solve interface for ODEProblem are passed directly to the solver without any check.

source