Dual Degree (B.Tech + M.Tech) Project · Department of Chemical Engineering, IIT Delhi
Utkarsh Singh · Advisor: Prof. Vivek V. Buwa · 2020 – 2022
![]() |
![]() |
| A packed bed of 7-hole catalyst pellets, generated from scratch in Blender | Simulated flow through the resulting bed in Ansys Fluent |
Packed-bed reactors are everywhere in the chemical industry — methanol synthesis, steam–methane reforming, ammonia synthesis. Their performance (pressure drop, heat transfer, catalyst effectiveness) is governed by how the catalyst particles pack together and by the shape of the particles themselves.
Before you can simulate flow and heat transfer in such a reactor, you need a realistic 3-D model of the bed. The usual route — build a physical bed and painstakingly reconstruct its packing in CAD — is slow and hard to reproduce.
This project takes a different route: it grows the bed computationally. Catalyst particles are dropped into a virtual tube inside Blender, and its rigid-body physics engine settles them into a realistic random packing. The bed is then characterised and simulated:
flowchart LR
A["Generate bed<br/><b>Blender</b><br/>rigid-body physics"] --> B["Slice bed<br/><b>Blender / MATLAB</b><br/>planar impressions"]
B --> C["Porosity profile<br/><b>MATLAB</b><br/>image analysis"]
A --> D["Rebuild in CAD<br/><b>Ansys SpaceClaim</b>"]
D --> E["CFD<br/><b>Ansys Fluent</b><br/>flow · heat transfer"]
C --> E
style A fill:#F5792A,color:#fff
style B fill:#F5792A,color:#fff
style C fill:#0076A8,color:#fff
style D fill:#FFB71B,color:#000
style E fill:#FFB71B,color:#000
The work spans three semesters and builds toward a single thesis:
| Phase | Focus | Deliverable |
|---|---|---|
| I | Synthetic bed generation + image-based porosity analysis | Report › |
| II | CFD of catalytic foam beds (Kelvin-cell & spherical-particle foams) | Report › |
| III | Heat transfer in packed beds; effect of contact-surface geometry | Thesis › |
A cylindrical tube is created as a passive rigid body with its top open. Catalyst particles are then released one at a time — each is keyframed as a kinematic body until its release frame, then flips to dynamic and falls under gravity, colliding and settling into place. A high-quality solver (1500 substeps/s, 200 solver iterations) keeps the thin, low-restitution contacts stable so the final packing is physically realistic.
Nine catalyst shapes were modelled, several of them industrially relevant multi-lobe and holed pellets:
Planar cross-sections of the nine particle shapes — the white outline is the particle's impression on a slice through the bed.
The lobed pellets are generated parametrically: for an N-lobe pellet, the
cross-section is N overlapping circles of radius R whose centres sit a distance
d from the axis. The visible arc swept by each lobe is
The profile is meshed, capped, and extruded — see
02_nlobe_particle.py.
To get the radial porosity profile — how void fraction varies from the tube wall to its centre — the bed is sliced into a stack of horizontal planes. Two methods were built:
- Analytic projection (MATLAB): each particle shape's outline on a plane is derived from first principles (a cylinder projects to an ellipse, a sphere to a circle, etc.) and drawn per-shape.
- Universal Boolean slicing (Blender): the plane is cut by every particle it
intersects using a Boolean-difference modifier, then rendered. This works for
any geometry with one script — no per-shape math required
(
05_export_planar_slices.py).
Each slice is binarised; at every radius r the void fraction is the ratio of black
(void) to total pixels, averaged over all planes to give the z-averaged radial
porosity (avgRadialPorosity.m).
![]() |
![]() |
| A binarised slice: void (black) vs. solid (white). | z-averaged radial porosity vs. dimensionless wall distance (R−r)/dp, compared across particle shapes. |
Result: particles with internal and external holes reach a higher void fraction than solid shapes such as cylinders and daisy pellets — a direct handle on pressure drop and transport in the bed.
Catalytic foams offer very high specific surface area. Two foam geometries were built and simulated in Ansys Fluent.
The foam skeleton is modelled on Lord Kelvin's 1887 problem — what equal-volume cells fill space with the least surface area? His answer, the bitruncated cubic honeycomb (a lattice of tetrakaidecahedra), is used as the foam unit cell. The struts are cylindrical (Ø 3.38 mm, cell Ø 16.8 mm).
![]() |
![]() |
![]() |
![]() |
| Unit cell | 3-D lattice | Foam bed | ~9M-element mesh |
Turbulent flow (Re ≈ 50 000) was solved with three RANS turbulence models — standard
k–ε, k–ω, and SST k–ω — to compare their pressure and velocity fields. The RANS
closure averages the Navier–Stokes equations and models the turbulent stresses via the
Boussinesq hypothesis, differing in how the eddy viscosity
![]() |
![]() |
| Pressure field across the foam cross-section | Velocity field across the foam cross-section |
A synthetically generated sphere packing is converted into a foam by expanding each particle's volume (by 1 %, 5 % and 10 %) until neighbours merge into a connected solid. Laminar flow (Re ≈ 10) and heat transfer were then simulated, and the radial porosity of the three expansions compared.
Left: spherical-particle foam geometry. Right: velocity field, showing jetting through the pore throats.
The final thesis phase studies conjugate heat transfer in a spherical-particle packed bed heated by a sandwich of hot gas, and asks a focused question: does the shape of the surface separating the hot and cold fluid regions matter?
Two beds were built — identical packings differing only in the fluid–fluid contact
surface: one planar, one zig-zag corrugated. Both were rebuilt from the
Blender packing in SpaceClaim (via recreate_bed_in_spaceclaim.py),
meshed with a poly-hexcore scheme, and solved in Fluent with a particle heat sink of
50 kW/m³.
![]() |
![]() |
![]() |
| Bed rebuilt in Ansys SpaceClaim | Poly-hexcore mesh | Temperature field through the bed |
A full surface-by-surface heat balance was computed for both configurations, quantifying how the corrugated contact surface redistributes heat between the streams.
packed-bed-simulations/
├── reports/ # 3 finalised PDF reports (Phase I, II, III / thesis)
├── presentations/ # 3 final presentation decks
├── code/
│ ├── blender/ # bed generation, parametric particles, slicing, export (Python)
│ ├── ansys/ # SpaceClaim script to rebuild a packing as CAD
│ ├── matlab/ # image-based porosity analysis + plotting
│ └── python/ # pixel-discretisation study (Jupyter)
├── blender-files/ # the actual .blend project files + particle-shape library
├── data/ # a sample settled bed: particle locations + porosity profile
└── assets/gallery/ # figures used throughout this README
- Generate a bed — open
blender-files/bed-generation_physics.blend, or runcode/blender/01_generate_packed_bed.pyin Blender's Scripting workspace; bake the rigid-body cache. - Export the packing —
03_export_particle_transforms.pywritesparticleLoc.csv(seedata/sample-sphere-bed/for the format). - Slice + measure porosity —
05_export_planar_slices.pyrenders the slices;code/matlab/avgRadialPorosity.mturns them into a radial porosity profile. - CFD — rebuild the packing in SpaceClaim with
code/ansys/recreate_bed_in_spaceclaim.py, then mesh and solve in Fluent.
| Tool | Role |
|---|---|
Blender (Python / bpy) |
Rigid-body bed generation, parametric particle modelling, universal Boolean slicing |
| MATLAB | Image binarisation & radial-porosity extraction, analytic particle projections, plotting |
| Ansys SpaceClaim (Python) | Scripted CAD reconstruction of the exact packing |
| Ansys Fluent | RANS turbulent & laminar CFD, conjugate heat transfer |
| Python / Jupyter | Pixel-discretisation error analysis for the porosity method |
This repository collects the finalised deliverables of my Dual Degree (B.Tech + M.Tech) project at the Department of Chemical Engineering, IIT Delhi, carried out under Prof. Vivek V. Buwa. It brings together an open-source physics-based approach to synthetic packed-bed generation, an image-processing pipeline for porosity characterisation, and CFD studies of foam and packed beds.
Acknowledgments: Prof. Vivek V. Buwa (supervisor), Mr. Kuldeep Singh, and the examining committee — Prof. Jyoti Phirani, Prof. Manjesh Kumar, Prof. Shantanu Roy and Prof. Vikram Singh.
- Code (
code/, Blender/Ansys scripts) is released under the MIT License. - Reports, presentations, figures and
.blendfiles are academic work shared for reference; please cite this repository / the thesis if you build on them. - Third-party journal PDFs from the original literature review are not redistributed here for copyright reasons; see the reference lists inside each report.












