PyMRM Gallery
  • Home
  • Gallery
  • Recent
  • Taxonomy
  • Contribute
  • About
Categories
data:tier1
data:tier2
data:tier3
data:tier4
data:tier5
data:tier6
kind:correlation
phase:gas
phase:gas-liquid
phase:gas-liquid-solid
phase:gas-solid
phase:liquid
phase:liquid-solid
sec:A
sec:B
sec:C
sec:D
sec:E
sec:F
sec:G
sec:H
sec:I
sec:J
struct:S1
struct:S10
struct:S12
struct:S13
struct:S2
struct:S3
struct:S4
struct:S5
struct:S6
struct:S7
struct:S8
struct:S9
tier:T0
tier:T1

Gallery

Every page shows a published model, the experimental data it was validated against, and a pymrm reproduction with a quantitative agreement metric.

Filtering. Every page carries tags on five axes at once. The Categories panel groups them by axis — click a tag to filter, click Categories to clear. Selecting a tag prints its code and meaning above the list. The Taxonomy page defines every axis and code in full.

Axis Meaning Example
Section Catalog section — the physical domain A transport closures, D fixed bed
Structure Mathematical structure — the axis to filter on if you want to reuse code S8 nested reactor–particle coupling
Tier Standing in the literature T0 canonical
Data Provenance tier of the dataset tier1 open repository, tier6 reference solution
Phase Phase system gas, gas-solid

Two pages sharing a structure code are solved by nearly the same pymrm code even when their physics is unrelated — that is the intended route to reuse. Hovering a tag in the panel shows what it means; the Taxonomy page lists them all.

Tanks in series: what two moments of an RTD do and do not buy you
sec:A
struct:S1
struct:S3
struct:S5
tier:T0
data:tier6
phase:liquid

Levenspiel’s Ch. 14 fitted to its own worked examples, then pushed past them. A five-stage chain with exactly the same mean and variance as E14.4’s four tanks leaves 23.2 %…

2026-08-07
ID A2.4
Updated 2026-10-31
Zwietering’s micromixing bounds: what a residence-time distribution cannot tell you
sec:A
struct:S1
struct:S3
struct:S5
tier:T0
data:tier6
phase:liquid

Complete segregation and maximum mixedness bracket the conversion for a given RTD. The bracket is reproduced against every number Zwietering printed, and it is wide: a…

2026-08-05
ID A2.8
Updated 2026-10-31
Richardson-Zaki: the exponent, the wall term, and what the paper’s own tables say about both
sec:A
struct:S1
tier:T0
data:tier2
phase:liquid-solid

u/u_t = eps^n is quoted everywhere; the 1954 paper it comes from is a data paper that prints its measured exponents, two wall laws, and a piecewise n(Re, d/D) fitted to…

2026-08-02
ID A1.5
Updated 2026-11-03
Calderbank & Moo-Young: one regime split, two powers of the diffusivity, and the arithmetic that does not close
sec:A
struct:S3
struct:S4
tier:T0
data:tier6
phase:gas-liquid

The correlation that says k_L depends on nothing but the physical properties, written twice: once for rigid interfaces with Sc^-2/3 and once for mobile ones with Sc^-1/2.…

2026-08-05
ID A3.6
Updated 2026-11-09
van ’t Riet’s k_L a correlation: a branched power law, what its data can and cannot resolve, and the measuring method it outgrows
sec:A
struct:S3
struct:S4
tier:T1
data:tier6
phase:gas-liquid

Two constants for coalescing water and two for ionic solutions. On the review’s own printed numbers the ionic v_s exponent is inside its own error bar, the ion enhancement…

2026-08-05
ID A3.7
Updated 2026-11-09
Taylor–Aris dispersion: how a velocity profile becomes a diffusivity
sec:A
struct:S3
struct:S6
tier:T0
data:tier2
phase:liquid

Shear plus molecular diffusion produces spreading that looks exactly like diffusion but is thousands of times faster. Solved two independent ways, checked against Taylor’s…

2026-07-27
ID A2.3
Updated 2026-10-31
Duncan–Toor ternary gas diffusion
sec:A
struct:S3
struct:S9
tier:T0
data:tier4
phase:gas

The two-bulb experiment where Fick’s law provably fails: nitrogen diffuses uphill, stops against its own gradient, then reverses.

2026-07-25
ID A4.9
Updated 2026-08-05
Chapman–Enskog binary diffusion
sec:A
struct:S3
tier:T0
data:tier2
phase:gas

A diffusivity derived from the intermolecular potential rather than fitted to diffusion data — put against the 50 measured pairs Chapman & Cowling print, and asked how much…

2026-08-05
ID A4.6
Updated 2026-08-13
Wen and Yu’s minimum fluidisation velocity: where 33.7 and 0.0408 come from, and what they cost
sec:A
struct:S3
tier:T0
data:tier2
phase:gas-solid

The correlation everyone uses for u_mf, re-derived from the Ergun force balance, and tested against 21 measured minimum-fluidisation velocities it never saw.

2026-08-02
ID A1.6
Updated 2026-11-03
Geldart’s powder groups: the boundaries, and what his own table says about them
sec:A
struct:S3
tier:T0
data:tier2
phase:gas-solid

Geldart’s 1973 classification is not a differential equation: it is two inequalities and a map. This page recomputes both boundary constants from the expressions he printed…

2026-08-02
ID A1.7
Updated 2026-11-09
Whitman’s two-film theory, and what his three runs can actually test
sec:A
struct:S3
tier:T0
data:tier3
phase:gas-liquid

The resistance-in-series picture that every absorption calculation still uses, rebuilt as the diffusion problem it claims to be, and then measured against the three runs…

2026-08-05
ID A3.1
Updated 2026-11-01
Ranz-Marshall: the only constant this paper tests is the 2.0, and the authors’ own water data miss it
sec:A
struct:S3
tier:T0
data:tier3
phase:gas-liquid

Nu = 2 + 0.6 Re^(1/2) Pr^(1/3) as Ranz and Marshall published it in 1952, taken apart constant by constant. The 0.60 is fitted to the very tables any comparison uses; the…

2026-08-07
ID A3.5
Updated 2026-11-09
Four packed-bed pressure-drop correlations, against the data Ergun fitted
sec:A
struct:S3
tier:T0
data:tier4
phase:gas-solid

Ergun, Kozeny-Carman, Darcy-Forchheimer and the Eisfeld-Schnitzlein wall correction on one dataset - 244 markers recovered from Ergun’s own 1952 figure, which give back his…

2026-07-30
ID A1.1
Updated 2026-11-02
Fuller-Schettler-Giddings: a correlation and the difference between fitting and predicting
sec:A
struct:S3
tier:T0
data:tier5
phase:gas

The most-used estimate of binary gas diffusivity, rebuilt from its own printed tables. Its famous 4.3 % is a goodness of fit to the 340 measurements the diffusion volumes…

2026-08-05
ID A4.5
Updated 2026-08-15
Fick’s law with Wilke’s mixture rule for the effective diffusivity
sec:A
struct:S3
tier:T0
data:tier6
phase:gas

Wilke’s 1950 rule is exact when a species diffuses through gases that are genuinely stagnant, so reporting agreement there proves nothing. His own paper supplies the test…

2026-08-07
ID A4.1
Updated 2026-08-07
Knudsen diffusion and the Bosanquet relation
sec:A
struct:S3
tier:T0
data:tier6
phase:gas

What happens when the pore is small enough that molecules hit the wall more often than each other — and exactly where the Bosanquet interpolation 1/D = 1/D_K + 1/D_AB is…

2026-08-01
ID A4.4
Updated 2026-10-22
Two ways to close gas-solid drag: Syamlal-O’Brien against Ergun, and against the velocity-voidage law it stands in for
sec:A
struct:S3
tier:T1
data:tier2
phase:gas-solid

The MFIX Theory Guide names two kinds of data a drag law can be built from and picks one. This page builds both, measures where they agree and where they do not, and tests…

2026-08-02
ID A1.8
Updated 2026-11-09
The Onda correlations, and which of their fourteen constants the paper can see
sec:A
struct:S3
tier:T1
data:tier3
phase:gas-liquid

Three coupled correlations - wetted area, liquid-side and gas-side coefficients - with the area feeding the other two. The gas-side constants are pinned to 0.45 % by an…

2026-08-05
ID A3.8
Updated 2026-11-09
Wakao-Funazkri: the correlation that came from putting axial dispersion back in
sec:A
struct:S3
tier:T1
data:tier4
phase:gas-solid

Sh = 2 + 1.1 Sc^(1/3) Re^0.6 is what the packed-bed mass-transfer data say once the axial dispersion coefficient is no longer assumed to be zero. This page rebuilds the…

2026-08-02
ID A3.4
Updated 2026-11-09
Maxwell–Stefan diffusion in zeolite micropores: what the thermodynamic factor removes, and what it does not
sec:A
struct:S4
struct:S9
tier:T1
data:tier6
phase:gas-solid

The M–S diffusivity is supposed to be the loading-independent one. On this review’s own numbers that is true in one of its two scenarios and exactly false in the other — and…

2026-08-02
ID A4.7
Updated 2026-08-03
Higbie’s penetration model: what a fixed contact time predicts, and the one measurement on disk that can test it
sec:A
struct:S4
tier:T0
data:tier6
phase:gas-liquid

Replace the steady film by a surface element exposed for a fixed time and k_L becomes 2 sqrt(D / pi t_exp), with the contact time supplied by the hydrodynamics, not fitted.…

2026-08-09
ID A3.2
Updated 2026-11-01
Danckwerts surface renewal: the age distribution, and what the √D exponent can and cannot settle
sec:A
struct:S4
tier:T0
data:tier6
phase:gas-liquid

Replace the stagnant film with a surface that is continually torn up and replaced, and k_L becomes √(Ds). The exponent on diffusivity is the falsifiable part, and this paper…

2026-08-05
ID A3.3
Updated 2026-11-01
The Danckwerts boundary conditions, and Wehner & Wilhelm’s proof of them
sec:A
struct:S4
tier:T0
data:tier6
phase:liquid

Two conditions close the axial-dispersion reactor: a flux balance at the inlet that makes the concentration jump, and a zero gradient at the outlet. Both against the closed…

2026-08-02
ID A2.1
Updated 2026-10-31
Where the axial dispersion coefficient comes from: Edwards & Richardson’s packed bed
sec:A
struct:S4
tier:T1
data:tier2
phase:gas

A pulse of argon in air, two response curves, and the two-point moment method that turns them into D_L, reproduced in pymrm, against the points digitised from their Figure 9.

2026-08-02
ID A2.5
Updated 2026-10-31
The Graetz–Nusselt problem: the constants Graetz could not compute
sec:A
struct:S6
tier:T0
data:tier1
phase:liquid

The developing thermal boundary layer in a tube, solved as a 2-D PDE, and the two amplitudes Graetz declared out of reach and calibrated out of his own apparatus instead.

2026-08-05
ID A3.15
Updated 2026-11-01
Yagi and Kunii’s effective conductivity: a sum of five mechanisms, and the one the data never switch on
sec:A
struct:S6
tier:T0
data:tier2
phase:gas-solid

The 1957 packed-bed conductivity model, separated into the three kinds of result the paper contains - theory, other people’s data re-analysed, and the authors’ own…

2026-08-05
ID A3.12
Updated 2026-11-09
Gunn’s dispersion correlations, and what the number 2 depends on
sec:A
struct:S6
tier:T1
data:tier2
phase:gas

The stochastic fast/slow-stream model for axial and radial dispersion in fixed beds, its one empirical function p(Re), and a 2-D pymrm bed that uses both coefficients at…

2026-08-05
ID A2.6
Updated 2026-11-09
Maxwell–Stefan vs Fick for multicomponent mixtures
sec:A
struct:S9
tier:T0
data:tier4
phase:gas

One physics, two bookkeepings: the Fick matrix [D] and the Maxwell–Stefan diffusivities describe the same mixture, and the page shows where the scalar effective diffusivity…

2026-07-31
ID A4.2
Updated 2026-08-05
The dusty gas model
sec:A
struct:S9
tier:T1
data:tier6
phase:gas

The n-component form of pore diffusion: why one effective diffusivity per species cannot be enough, what the viscous term is worth, and how the composition window for uphill…

2026-08-01
ID A4.3
Updated 2026-10-22
The random pore model, 1980: eight figures, no table, and what the printed numbers still decide
sec:B
struct:S1
struct:S3
tier:T0
data:tier6
phase:gas-solid

Bhatia and Perlmutter build the reacting solid out of randomly overlapping cylindrical pores, and one group psi = 4 pi L_o (1 - eps_o)/S_o^2 decides whether the reaction…

2026-08-13
ID B3.3
Updated 2026-11-02
Levenspiel’s four deactivation classes: which reactor can tell them apart
sec:B
struct:S1
struct:S5
tier:T0
data:tier6
phase:gas-solid

Levenspiel (1972) asks whether experiments can be devised that return the orders of an nth-order deactivating rate equation, for the four classes parallel, series…

2026-08-08
ID B2.3
Updated 2026-11-02
Voorhies’ coking law: carbon on catalyst keeps time, not throughput
sec:B
struct:S1
tier:T0
data:tier2
phase:gas-solid

The 1945 origin of C_c = A·theta^n, its two printed tables quantified: over a fourfold feed-rate range carbon on catalyst moves with feed rate at an exponent near zero, with…

2026-08-08
ID B2.1
Updated 2026-11-04
The shrinking core, and when its three textbook limits are safe to use
sec:B
struct:S12
tier:T0
data:tier6
phase:gas-solid

Yagi and Kunii’s one equation contains all three classical regimes. Reading it off the 1955 page and integrating the moving boundary independently gives the same thing to…

2026-07-29
ID B3.1
Updated 2026-11-02
Thiele modulus and the Weisz–Hicks non-isothermal pellet
sec:B
struct:S3
struct:S10
tier:T0
data:tier6
phase:gas-solid

The effectiveness factor from Thiele’s exact isothermal solution to Weisz and Hicks’ non-isothermal pellet, where η exceeds 100 and three steady states coexist.

2026-07-25
ID B1.1
Updated 2026-11-03
The grain model: a solid made of shrinking cores, and the exact penetration law inside it
sec:B
struct:S3
struct:S12
tier:T0
data:tier6
phase:gas-solid

Szekely and Evans replaced the shrinking-core model’s empirical rate constant with structure: porosity, grain size, two diffusivities and a rate constant that no longer…

2026-08-05
ID B3.2
Updated 2026-11-02
Aris’s shape factor, and the shapes he could not test
sec:B
struct:S3
struct:S13
tier:T0
data:tier6
phase:gas-solid

Dividing volume by external surface area makes the effectiveness factor almost shape-independent. Aris measured ‘almost’ on the three shapes that have closed-form answers.…

2026-07-31
ID B1.2
Updated 2026-11-01
The Mears criteria: what each transport-limit test actually guarantees
sec:B
struct:S3
struct:S4
tier:T0
data:tier6
phase:gas-solid

Mears (1971) collects the diagnostic inequalities that decide whether a measured rate is chemistry or transport, each claiming a 5 % tolerance. This page solves the pellet…

2026-08-06
ID B1.7
Updated 2026-11-02
Bischoff’s generalised modulus: measuring how narrow the narrow band is
sec:B
struct:S3
tier:T0
data:tier6
phase:gas-solid

One modulus built from the rate integral collapses the effectiveness-factor curves of every reaction order onto nearly one curve. Bischoff said the spread is ‘about 15%’ for…

2026-08-08
ID B1.3
Updated 2026-11-03
The Weisz-Prater criterion: what an observed rate can tell you
sec:B
struct:S3
tier:T0
data:tier6
phase:gas-solid

One inequality in measurable quantities decides whether a rate is kinetics or diffusion. This page computes what its threshold actually guarantees, tests the non-isothermal…

2026-08-01
ID B1.4
Updated 2026-11-01
The Prater relation: a pellet’s temperature is slaved to its concentration
sec:B
struct:S3
tier:T0
data:tier6
phase:gas-solid

One linear identity fixes the temperature everywhere inside a catalyst particle from the concentration alone, whatever the kinetics and whatever the shape. Proved…

2026-07-31
ID B1.6
Updated 2026-11-01
Froment-Bischoff coke deactivation: the coke profile names the fouling mechanism
sec:B
struct:S4
struct:S5
tier:T0
data:tier6
phase:gas
phase:gas-solid

The 1961 paper that tied catalyst activity to deposited carbon instead of time on stream: all three of its solutions re-derived and met at observed second order by a pymrm…

2026-08-06
ID B2.2
Updated 2026-11-02
Langmuir-Hinshelwood-Hougen-Watson kinetics: the 1947 codimer estimation, re-run
sec:C
struct:S1
struct:S2
tier:T0
data:tier2
phase:gas
phase:gas-solid

The dual-site rate law from the people it is named after - all 18 rival mechanisms refitted from the book’s own printed data, a 1947 worksheet slip diagnosed, a misprint in…

2026-08-05
ID C1.1
Updated 2026-08-15
Steam methane reforming: the Xu-Froment intrinsic kinetics
sec:C
struct:S1
struct:S2
tier:T1
data:tier2
data:tier4
phase:gas
phase:gas-solid

The most-used rate equations in reformer modelling, rebuilt from the 1989 tables and put back against the runs plotted in the paper’s own Figures 2 and 3.

2026-07-26
ID C2.1
Updated 2026-11-02
Mars-van Krevelen: the redox rate law, read from the paper that derived it
sec:C
struct:S1
tier:T0
data:tier2
phase:gas-solid

The 1954 origin of redox (Mars-van Krevelen) kinetics prints no rate constant for any aromatic oxidation; its printed numbers are all in the SO2 application. This page…

2026-08-05
ID C1.3
Updated 2026-11-03
Eley-Rideal kinetics: the impact rate law, and the case that the name is wrong
sec:C
struct:S1
tier:T0
data:tier6
phase:gas
phase:gas-solid
phase:liquid-solid

The gas-collision (impact) rate law contrasted with Langmuir-Hinshelwood kinetics imported from C1.1 - every printed limit derived, a dimensionally inconsistent printed…

2026-08-08
ID C1.2
Updated 2026-08-08
o-Xylene to phthalic anhydride: the classic hot spot
sec:C
struct:S2
struct:S6
tier:T0
data:tier6
phase:gas-solid

Froment’s 1967 demonstration that effective kinetics plus a two-dimensional pseudo-homogeneous model reproduces fixed-bed hot spots: both models rebuilt, and the…

2026-08-05
ID C2.10
Updated 2026-10-31
Five fixed-bed models on one reactor: what each rung of Froment’s ladder buys
sec:D
struct:S2
struct:S4
struct:S6
struct:S7
struct:S8
tier:T0
data:tier6
phase:gas-solid

Chapter 11 of Froment, De Wilde & Bischoff classifies fixed-bed reactor models in a 2x3 table and then works five of its six cells: basic one-dimensional plug flow (11.5…

2026-08-17
ID D1.1
Updated 2026-10-31
Barkelew’s runaway diagram
sec:D
struct:S2
tier:T0
data:tier6
phase:gas-solid

The 1959 chart that collapses the runaway boundary of a cooled tubular reactor onto two dimensionless groups - rebuilt from the paper that reprints it, and tested where a…

2026-08-01
ID D2.1
Updated 2026-10-31
Parametric sensitivity and runaway in a fixed bed
sec:D
struct:S2
tier:T0
data:tier6
phase:gas-solid

Two 1970 criteria for when a cooled tubular reactor stops being controllable, rebuilt, then swept over the whole operating plane the original could only sample.

2026-07-27
ID D2.2
Updated 2026-11-03
The Davidson bubble: where 0.711’s companions come from
sec:E
struct:S3
tier:T0
data:tier6
phase:gas-solid

A single bubble in an incipiently fluidised bed is a Laplace problem with a uniform-pressure hole in it. Solving it once, with pymrm, produces both the cloud that Kunii and…

2026-07-31
ID E1.2
Updated 2026-11-02
The two-phase theory, tested against the measurements it was born with
sec:E
struct:S7
tier:T0
data:tier2
phase:gas-solid

Toomey and Johnstone wrote the two-phase postulate down as an equality in 1952 and then, four columns later, printed intercepts that refute half of it. The intercepts are…

2026-08-07
ID E1.1
Updated 2026-11-02
The bubbling bed, and the conversion ceiling nobody can buy their way past
sec:E
struct:S7
tier:T0
data:tier6
phase:gas-solid

Kunii and Levenspiel’s 1968 model of a fluidized bed reduces to one algebraic expression. Reproducing their three worked appendices verifies it, and then the same expression…

2026-07-30
ID E2.1
Updated 2026-11-03
Wilkinson’s high-pressure bubble-column holdup correlation
sec:F
struct:S1
tier:T1
data:tier4
phase:gas-liquid

Four equations that predict gas holdup from fluid properties alone. Run end to end they say something startling at atmospheric pressure: the homogeneous regime does not…

2026-07-31
ID F1.3
Updated 2026-11-03
Large-bubble holdup in a churn-turbulent bubble column
sec:F
struct:S1
tier:T1
data:tier4
phase:gas-liquid

A correlation with no fluid property in it at all, tested against the figure it was fitted to, and against the one it replaced. The figure supports the first test well and…

2026-07-28
ID F1.4
Updated 2026-11-03
CO2 absorption into amine-promoted carbonate solutions
sec:F
struct:S3
struct:S10
tier:T1
data:tier6
phase:gas-liquid

Seven species, two kinetic reactions and two acid-base equilibria decide how fast CO2 enters hot potash with an amine promoter. This page rebuilds the film model that…

2026-08-02
ID F3.5
Updated 2026-10-22
Hatta number and the gas–liquid reaction regimes
sec:F
struct:S3
tier:T0
data:tier6
phase:gas-liquid

Where reaction and diffusion compete in a liquid film: the exact first-order solution, and how far the Van Krevelen–Hoftijzer and DeCoursey enhancement approximations can be…

2026-07-26
ID F3.1
Updated 2026-10-22
Van Krevelen-Hoftijzer: the chart replaced by a solve, and the assumption behind it measured
sec:F
struct:S3
tier:T0
data:tier6
phase:gas-liquid

The enhancement factor for a second-order gas-liquid reaction is an implicit relation that textbooks hand over as a chart. Solving the film equations instead prices the…

2026-08-14
ID F3.2
Updated 2026-10-30
A Fischer–Tropsch slurry bubble column, and two typos that stop it working
sec:F
struct:S7
struct:S8
tier:T1
data:tier4
phase:gas-liquid-solid

Plug-flow large bubbles over a well-mixed slurry. The hydrodynamics are tested against measured holdup; the reactor reaches the published conversions only after two printed…

2026-07-30
ID F2.3
Updated 2026-11-03
Larkins: the authors’ own worked example redone, and the average-pressure shortcut under it priced
sec:G
struct:S3
tier:T0
data:tier2
phase:gas-liquid-solid

Larkins, White and Jeffrey print Table 3 measured and Table 4 calculated for the same eight runs, so their whole chain can be redone cell by cell: seven rows close, run 5…

2026-08-14
ID G1.1
Updated 2026-10-31
High-pressure trickle-bed hydrodynamics
sec:G
struct:S3
tier:T1
data:tier4
phase:gas-liquid-solid

Two coupled correlations, a pressure gradient that needs the hold-up and a hold-up that needs the pressure gradient, closed as a pair against the figures they were derived…

2026-07-31
ID G1.7
Updated 2026-10-31
Trickle-bed reactor with partial catalyst wetting
sec:G
struct:S8
tier:T1
data:tier6
phase:gas-liquid-solid

A partially wetted pellet fed from two sides at once, and a printed figure whose legend is off by one row: reconstructed, quantified, and shown both ways.

2026-08-02
ID G1.8
Updated 2026-10-31
Sieverts-law hydrogen permeation through Pd membranes
sec:H
struct:S3
struct:S5
tier:T0
data:tier2
phase:gas

Why the exponent is one half, what it buys you, and when it stops mattering. The permeance Itoh quotes is derived rather than quoted, and the same numbers show his membrane…

2026-08-01
ID H1.1
Updated 2026-11-03
The solution-diffusion model, and what a rejection plot cannot tell you
sec:H
struct:S3
tier:T0
data:tier4
phase:liquid

Two constants fitted to two curves predict the third. The prediction sits within a printed line width of the markers, and the figure it is checked against has no power to…

2026-07-29
ID H1.7
Updated 2026-10-31
Itoh Pd membrane reactor: shifting a dehydrogenation equilibrium
sec:H
struct:S7
tier:T0
data:tier2
phase:gas-solid

Hydrogen leaves through the wall, so a reaction capped at 18.7 % conversion runs to 99.7 %. The model puts that operating point on its thermodynamic ceiling and lands on the…

2026-07-31
ID H1.4
Updated 2026-11-03
Maxwell–Stefan mixture diffusion in a zeolite membrane: a selectivity of 487 where the pure components predict 1.73
sec:H
struct:S9
struct:S4
tier:T1
data:tier2
phase:gas-solid

Two things break the pure-component prediction: the mixture isotherm is not multicomponent Langmuir, and the exchange coefficients are finite. Both are reproduced here, and…

2026-08-03
ID H1.9
Updated 2026-10-31
The Robeson upper bound, revisited: where the 2008 line moved, and what “primarily the front factor” can mean
sec:H
tier:T0
data:tier2
phase:gas
kind:correlation

Robeson’s 2008 Table 12 prints k and n for thirteen gas pairs, but only nine support a prior-versus-present comparison. On those nine the shift is decomposed into a…

2026-08-08
ID H1.8
Updated 2026-10-31
Light-off in a monolithic catalytic converter
sec:I
struct:S4
struct:S7
tier:T0
data:tier6
phase:gas-solid

An ignition front sweeping down a monolith channel, and the wrong-way temperature rise that appears when the same converter is suddenly cooled.

2026-07-30
ID I1.2
Updated 2026-10-31
Heck, Wei & Katzer 1976: what the one-dimensional monolith model is adequate for
sec:I
struct:S6
tier:T0
data:tier6
phase:gas-solid

The paper’s two claims, tested: Table 1’s asymptotic Nusselt numbers derived from scratch, the Nusselt singularity root-found downstream of the cause the text gives it, and…

2026-08-15
ID I1.3
Updated 2026-10-31
BET 1938: the theory that yields the surface, against the theory that has to be given it
sec:J
struct:S1
struct:S10
tier:T0
data:tier6
phase:gas-solid

Brunauer, Emmett and Teller open by refuting a rival — the polarization theory of de Boer, Zwicker and Bradley — and only then derive their own isotherm. This page rebuilds…

2026-08-07
ID J1.3
Updated 2026-08-07
IAST 1965: mixture adsorption from pure-component isotherms alone — and a paper that prints no numbers
sec:J
struct:S1
struct:S10
tier:T0
data:tier6
phase:gas-solid

Myers and Prausnitz derive the ideal adsorbed solution theory — the Raoult’s-law analogue in which P y_i = P_i°(π) x_i at matched spreading pressure — and validate it on…

2026-08-08
ID J1.4
Updated 2026-08-08
Andrews’ inhibition function: the two claims in his Summary, tested
sec:J
struct:S1
tier:T0
data:tier1
phase:liquid

Andrews (1968) puts Haldane’s enzyme-inhibition function into a batch and a chemostat balance and states two results in one sentence of his Summary: in BATCH culture the…

2026-08-14
ID J4.2
Updated 2026-10-31
Monod: what a growth curve can and cannot pick out of the family
sec:J
struct:S1
tier:T0
data:tier2
phase:liquid

Froment, De Wilde & Bischoff section 1.5.2 prints the Monod equation as eq. (1.5.2-1), defines its two constants by exactly two properties - the asymptote r_m and the…

2026-08-13
ID J4.1
Updated 2026-10-30
Luedeking-Piret: refitting alpha and beta from the one run whose raw data are printed
sec:J
struct:S1
tier:T0
data:tier2
phase:liquid

Luedeking & Piret (1959) print dP/dt = alpha dN/dt + beta N in their Summary and give six (alpha, beta) pairs, one per pH level, in Table III. THE PAPER USES GREEK alpha AND…

2026-08-14
ID J4.4
Updated 2026-08-14
Michaelis-Menten and Briggs-Haldane: one rate law, two constants, and what data can decide between them
sec:J
struct:S1
tier:T0
data:tier2
phase:liquid

Froment, De Wilde & Bischoff section 1.5.1 derives the same rate law twice - by rapid equilibrium, giving K_M = k_-1/k_1 (eq. 1.5.1-8), and by the pseudo steady state…

2026-08-13
ID J4.6
Updated 2026-10-30
Langmuir 1918: the isotherm that could not have proved its own conclusion
sec:J
struct:S1
tier:T0
data:tier5
phase:gas-solid

Langmuir’s isotherm is fitted to his own data by a hand-drawn straight line, so the agreement in Tables II-XVII is a goodness of fit and this page labels it as one…

2026-08-07
ID J1.1
Updated 2026-10-30
The gel effect without a switch: Chiu, Carratt and Soong’s diffusion-controlled termination
sec:J
struct:S1
tier:T0
data:tier6
phase:liquid

Chiu, Carratt & Soong (1983) build the Trommsdorff-Norrish gel effect out of one unbranched constitutive equation - 1/k_t = 1/k_t0 + theta_t P/f(x) - and criticise earlier…

2026-08-14
ID J5.3
Updated 2026-10-30
Butler–Volmer kinetics, and where its two limits stop being safe
sec:J
struct:S1
tier:T0
data:tier6
phase:liquid-solid

The interfacial charge-transfer law in the form a reactor model uses it, read off Doyle, Fuller and Newman (1993) — the exchange current density derived from their own…

2026-07-31
ID J3.1
Updated 2026-08-05
ASM1: a stoichiometric matrix that checks itself
sec:J
struct:S1
tier:T1
data:tier2
phase:liquid

The activated sludge model is 8 processes and 13 components arranged in a Petersen matrix. Read it off the 1987 page and the continuity relations that the component…

2026-07-30
ID J4.8
Updated 2026-10-30
The linear driving force: where Glueckauf’s 15 comes from, and when it fails
sec:J
struct:S3
struct:S4
tier:T0
data:tier6
phase:gas-solid

One number stands in for a whole diffusion equation in most adsorption models. Solving the sphere it approximates shows exactly what the shortcut costs, and when.

2026-07-27
ID J1.5
Updated 2026-11-03
The van Deemter equation: the three terms, the constants they were read off, and what the Gaussian costs
sec:J
struct:S4
tier:T0
data:tier6
phase:gas-liquid
phase:liquid-solid

H = A + B/u + Cu is fitted to twelve points on one page of a 1956 paper. Rebuilding the chain that produced it recovers the film thickness, the particle diffusivity, and one…

2026-08-09
ID J1.10
Updated 2026-10-30
How much battery model do you actually need?
sec:J
struct:S8
struct:S10
struct:S3
tier:T1
data:tier6
phase:liquid-solid

Marquis et al.’s asymptotic reduction of the Doyle–Fuller–Newman model, the SPM and the SPMe, applied to the gallery’s own 1993 cell, with the error scaling the asymptotics…

2026-07-31
ID J3.5
Updated 2026-11-09
The lithium-ion battery model everything else is built on
sec:J
struct:S8
struct:S10
tier:T1
data:tier6
phase:liquid-solid

Doyle, Fuller and Newman’s pseudo-two-dimensional cell, rebuilt from the 1993 paper, including the one transport property the paper never prints, recovered from its own…

2026-07-31
ID J3.4
Updated 2026-11-04
No matching items
Source Code
---
title: "Gallery"
listing:
  id: model-listing
  contents: pages
  type: grid
  grid-columns: 3
  sort: "categories"
  sort-ui: [title, date, date-modified]
  filter-ui: true
  categories: cloud
  fields: [catalog-id, title, description, categories, date, date-modified]
  field-display-names:
    catalog-id: "ID"
    date: "Published"
    date-modified: "Updated"
  date-format: "YYYY-MM-DD"
  page-size: 1000
  feed: true
page-layout: full
toc: false
---

Every page shows a published model, the experimental data it was validated
against, and a `pymrm` reproduction with a quantitative agreement metric.

**Filtering.** Every page carries tags on five axes at once. The **Categories**
panel groups them by axis — click a tag to filter, click *Categories* to clear.
Selecting a tag prints its code and meaning above the list. The
[Taxonomy](taxonomy.qmd) page defines every axis and code in full.

| Axis | Meaning | Example |
|---|---|---|
| **Section** | Catalog section — the physical domain | `A` transport closures, `D` fixed bed |
| **Structure** | Mathematical structure — *the axis to filter on if you want to reuse code* | `S8` nested reactor–particle coupling |
| **Tier** | Standing in the literature | `T0` canonical |
| **Data** | Provenance tier of the dataset | `tier1` open repository, `tier6` reference solution |
| **Phase** | Phase system | `gas`, `gas-solid` |

Two pages sharing a structure code are solved by nearly the same pymrm code even
when their physics is unrelated — that is the intended route to reuse. Hovering a
tag in the panel shows what it means; the [Taxonomy](taxonomy.qmd) page lists them
all.

::: {#gallery-category-title}
:::

::: {#model-listing}
:::

```{=html}
<script>
// Regroup Quarto's category cloud into one block per classification axis.
//
// The tags are prefixed (sec:, struct:, tier:, data:, phase:) so that a single
// flat list can carry five axes. Left alone, Quarto sorts them alphabetically
// and scales each one's font size by how many pages use it -- which interleaves
// the axes, repeats the prefix on every chip, puts struct:S10 before struct:S2,
// and makes a rare tag look less important than a common one when the tags are
// a filter, not a measure of popularity.
//
// The existing elements are MOVED, never cloned or rebuilt, so the click
// handlers Quarto attached to them keep working, and
// `.quarto-listing-category .category[data-category=...]` still matches for
// activation from the URL hash.
(function () {
  var AXES = [
    { prefix: "sec", label: "Section" },
    { prefix: "struct", label: "Structure" },
    { prefix: "tier", label: "Tier" },
    { prefix: "data", label: "Data" },
    { prefix: "phase", label: "Phase" },
  ];

  // A bare "A" or "S8" on a chip says nothing on its own, so the meaning goes
  // in the tooltip. Kept in step with docs/taxonomy.md, Axes 1 and 2.
  var MEANING = {
    "sec:A": "Transport & closure relations",
    "sec:B": "Catalyst particle & intraparticle transport",
    "sec:C": "Reaction kinetics",
    "sec:D": "Fixed / packed bed reactors",
    "sec:E": "Fluidised beds",
    "sec:F": "Gas–liquid & slurry reactors",
    "sec:G": "Three-phase packed beds",
    "sec:H": "Membrane reactors & separations",
    "sec:I": "Structured & intensified reactors",
    "sec:J": "Adjacent unit operations",
    "struct:S1": "ODE-IVP in time (batch, CSTR dynamics)",
    "struct:S2": "ODE-IVP in space (ideal PFR marching)",
    "struct:S3": "1D steady BVP (particle, film)",
    "struct:S4": "1D transient PDE (axial dispersion, breakthrough)",
    "struct:S5": "1D convection-dominated (sharp fronts)",
    "struct:S6": "2D PDE (radial dispersion, Graetz, monolith)",
    "struct:S7": "Multi-domain / multi-phase coupling",
    "struct:S8": "Nested-scale coupling (reactor ↔ particle)",
    "struct:S9": "Implicit multicomponent flux (Maxwell–Stefan, dusty gas)",
    "struct:S10": "DAE / constrained (pressure–velocity, electroneutrality)",
    "struct:S11": "Population balance (internal coordinate)",
    "struct:S12": "Moving boundary / shrinking core",
    "struct:S13": "Non-standard geometry",
    "tier:T0": "Canonical — taught everywhere, still the reference formulation",
    "tier:T1": "Field standard — the default model in its subfield",
    "tier:T2": "Established alternative — competes with the field standard",
    "tier:T3": "Specialised or emerging",
    "data:tier1": "Open repository",
    "data:tier2": "Table printed in the paper",
    "data:tier3": "Supplementary material",
    "data:tier4": "Digitised from a figure",
    "data:tier5": "Obtained from the authors",
    "data:tier6": "Reference or exact solution, not experiment",
  };

  // "S10" must sort after "S2", so compare any trailing digits numerically.
  function naturalKey(s) {
    var m = /^(\D*)(\d*)(.*)$/.exec(s);
    return [m[1], m[2] === "" ? -1 : parseInt(m[2], 10), m[3]];
  }
  function naturalCmp(a, b) {
    var ka = naturalKey(a), kb = naturalKey(b);
    return (
      ka[0].localeCompare(kb[0]) || ka[1] - kb[1] || ka[2].localeCompare(kb[2])
    );
  }

  function group() {
    var cloud = document.querySelector(
      ".quarto-listing-category.category-cloud"
    );
    if (!cloud || cloud.dataset.grouped === "1") return;

    var items = Array.prototype.slice
      .call(cloud.querySelectorAll(":scope > .category"))
      .map(function (el) {
        var full = (el.textContent || "").trim();
        var i = full.indexOf(":");
        return {
          el: el,
          full: full,
          prefix: i > 0 ? full.slice(0, i) : "",
          rest: i > 0 ? full.slice(i + 1) : full,
        };
      });
    if (!items.length) return;

    var buckets = {}, order = [];
    items.forEach(function (it) {
      var key = it.prefix || "_other";
      if (!buckets[key]) {
        buckets[key] = [];
        order.push(key);
      }
      buckets[key].push(it);
    });

    var known = AXES.map(function (a) { return a.prefix; });
    var sequence = AXES.filter(function (a) { return buckets[a.prefix]; }).concat(
      order
        .filter(function (k) { return known.indexOf(k) === -1; })
        .map(function (k) {
          return { prefix: k, label: k === "_other" ? "Other" : k };
        })
    );

    var frag = document.createDocumentFragment();
    sequence.forEach(function (axis) {
      var bucket = buckets[axis.prefix];
      bucket.sort(function (a, b) { return naturalCmp(a.rest, b.rest); });

      var group = document.createElement("div");
      group.className = "gallery-cat-group";
      var label = document.createElement("span");
      label.className = "gallery-cat-group-label";
      label.textContent = axis.label;
      group.appendChild(label);

      var chips = document.createElement("div");
      chips.className = "gallery-cat-chips";
      bucket.forEach(function (it) {
        // the full prefixed tag stays reachable, and where the short label is
        // not self-explanatory the tooltip says what it means
        var meaning = MEANING[it.full];
        it.el.setAttribute("title", meaning ? it.full + " — " + meaning : it.full);
        var span = it.el.querySelector(".quarto-category-count") || it.el;
        if (it.prefix) span.textContent = it.rest;
        chips.appendChild(it.el); // move, preserving Quarto's onclick
      });
      group.appendChild(chips);
      frag.appendChild(group);
    });

    cloud.appendChild(frag);
    cloud.dataset.grouped = "1";

    var title = document.querySelector(".quarto-listing-category-title");
    if (title && !document.querySelector(".gallery-category-hint")) {
      var hint = document.createElement("span");
      hint.className = "gallery-category-hint";
      hint.textContent = "Click a tag to filter; click Categories to clear.";
      title.parentNode.insertBefore(hint, title.nextSibling);
    }
  }

  // When a tag is active, print a heading above the list that spells out the
  // code and what it stands for -- e.g. "Section A -- Transport & closure
  // relations" -- so the short chip label is not the only clue to what is being
  // shown. The active category is read from Quarto's own `.category.active`
  // element, so this stays in step with whatever the click handlers and the URL
  // agree on.
  //
  // Quarto stores the category in `data-category`, base64-encoded from its
  // URL-encoded form (e.g. "sec:A" -> "c2VjJTNBQQ=="). Decode it, but only trust
  // the decoded value if it looks like one of our prefixed tags, so a future
  // Quarto that stored the value verbatim still works.
  function decodeCat(raw) {
    if (!raw) return null;
    try {
      var d = decodeURIComponent(atob(raw));
      if (d.indexOf(":") >= 0 || MEANING[d]) return d;
    } catch (e) {}
    return raw;
  }

  function describe(full) {
    var i = full.indexOf(":");
    var prefix = i > 0 ? full.slice(0, i) : "";
    var rest = i > 0 ? full.slice(i + 1) : full;
    var axis = AXES.filter(function (a) { return a.prefix === prefix; })[0];
    var axisLabel = axis ? axis.label : prefix;
    var meaning = MEANING[full];
    return (
      (axisLabel ? axisLabel + " " : "") +
      rest +
      (meaning ? " — " + meaning : "")
    );
  }

  function updateTitle() {
    var host = document.getElementById("gallery-category-title");
    if (!host) return;
    var active = document.querySelector(
      ".quarto-listing-category .category.active"
    );
    var full = active ? decodeCat(active.getAttribute("data-category")) : null;
    if (!full) {
      host.textContent = "";
      host.style.display = "none";
      return;
    }
    host.textContent = describe(full);
    host.style.display = "block";
  }

  function wireTitle() {
    if (document.body.dataset.catTitleWired !== "1") {
      // Any click in the category sidebar can change the active filter (a chip,
      // or the "Categories" title that clears it); read the settled state a tick
      // later. Delegated on document so the clear-title click is covered too.
      document.addEventListener("click", function (e) {
        if (
          e.target.closest &&
          e.target.closest(
            ".quarto-listing-category, .quarto-listing-category-title"
          )
        ) {
          setTimeout(updateTitle, 0);
        }
      });
      document.body.dataset.catTitleWired = "1";
    }
    updateTitle();
  }

  function init() {
    group();
    wireTitle();
  }

  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", init);
  } else {
    init();
  }
  window.addEventListener("load", init); // in case the listing renders late
  window.addEventListener("hashchange", updateTitle); // filter set from the URL
})();
</script>
```

Code MIT · Prose CC-BY-4.0 · See About for data terms

 
  • Edit this page
  • Report an issue

Built with Quarto