DPM Transient (Unsteady) Tracking -- Setup, Time Stepping, Puff Injection, and Pulsatile Flows
#+CATEGORY: cfd
#+TAGS: DPM transient unsteady tracking puff pulsatile time-stepping particle-history
#+MATURITY: growing
DPM Transient Tracking :: Setup, Time Stepping, and Pulsatile Flows
The shisha simulation currently runs steady-state DPM, but a future transient simulation will capture puff dynamics (inhalation/exhalation cycles) and time-dependent concentration fields. This page documents the complete transient DPM workflow for Fluent 2024 R1: activation, time-step selection, injection scheduling, and diagnostic tools.
Steady vs. Transient DPM: What Changes
| Feature | Steady Tracking | Transient Tracking |
| --------- | ---------------- | ------------------- |
| Flow field | Fixed (already converged) | Evolving each time step |
| Particle release | Continuous (all at once) | Scheduled (at specified times) |
| Injection types | Surface, point, file | + Puff, periodic |
| Time integration | Pseudo-time (max steps) | Real time (dt per step) |
| Coupling | Every N iterations | Every time step |
| Output = history | Final position only | Position at every dt |
| Computational cost | Low | 10--100x higher |
Key distinction
In steady DPM, the time variable is a pseudo-time used for convergence -- it does not correspond to physical time. In transient DPM, each time step is a real physical interval, and particle positions are recorded at each step.
Activating Transient DPM
Step-by-step (Fluent 2024 R1)
1. Continuous phase: switch solver to Transient
- General > Time =
Transient - Set physical time step
\Delta t - Set number of time steps
2. DPM: enable transient tracking
- Models > Discrete Phase > Interaction tab
Tracking Parameters:Unsteady Particle Tracking= ON
3. Coupling: for two-way coupling in transient
Coupling Interval= 1 (couple every time step)- Use "Coupled" (strong coupling) if mass loading > 1%
4. Injections: set release schedule
- See Injection Scheduling below
TUI confirmation
define/models/discrete-phase/unsteady-tracking yes
solve/set/time-step 0.001
solve/dual-time-iterate 50 20 (50 sub-iterations, 20 time steps)
Time Step Selection
The time step must satisfy three constraints:
Constraint 1: Resolve the flow physics
For shisha: =L = 0.1= m, =U = 0.3= m/s, so \Delta t < 0.33 s.
Constraint 2: Resolve the particle response time
For 2.5 um particle, =\rho_p = 1200= kg/m^3, =\mu = 1.8 \times 10^{-5}= Pa s:
=tau_p = 1200 \times (2.5 \times 10^{-6})^2 / (18 \times 1.8 \times 10^{-5}) = 2.3 \times 10^{-4} s=
So \Delta t < 0.23 ms for the particle dynamics to be resolved.
Constraint 3: CFL for particle transport
For =\Delta x_{min} = 0.001= m and =U_p = 1= m/s: \Delta t < 0.001 s.
Recommendation for shisha transient
| \Delta t | Use case |
| ---------- | ---------- |
| 0.001 s (1 ms) | Good balance: resolves puff, particle dynamics, and CFL |
| 0.0005 s (0.5 ms) | High accuracy for fine particles (< 0.5 um) |
| 0.01 s (10 ms) | Acceptable only if particle response time is not critical |
Sub-iterations per time step
For implicit solver: 5--20 sub-iterations per time step ensure the nonlinear equations converge within each dt.
solve/set/discretization-scheme ... (verify 2nd order)
solve/dual-time-iterate 20 100 (20 sub-its, 100 time steps)
Injection Scheduling
Steady injection (continuous release)
Release particles at every time step from the start:
- Set =Start Time = 0=, =Stop Time = end_time=, =Interval = dt=
- This is equivalent to a continuous source
Puff injection (finite-duration release)
Release particles for a defined duration, then stop:
- =Start Time = 0=, =Stop Time = 0.5= s, =Interval = dt=
- After =t = 0.5= s, no new parcels are injected
- Existing parcels continue tracking until they escape or are trapped
Periodic injection (breathing cycle)
For a shisha puff cycle (inhale + exhale):
- Injection type =
periodic(available in Fluent 2024 R1) - Set =Period = 5.0= s (one full breath cycle)
- Set
Start,Stop,Durationwithin each period - Fluent releases parcels once per period
File injection (prescribed time history)
For arbitrary time-varying injection: 1. Create a DPM sample file at the injection face (from a preliminary run) 2. Use File Injection type with the sample file 3. Set Start Time and Stop Time to define when the file injection is active
Shisha puff schedule example
| Phase | Duration | Injection |
| ------- | ---------- | ----------- |
| Inhale | 0--2 s | No injection (clean air drawn through bowl) |
| Smoke generation | 2--3 s | Surface injection at bowl outlet (mass flow rate = 3 mg/min) |
| Exhale | 3--5 s | No injection; smoke disperses and exits through hose |
| Rest | 5--7 s | No injection; residual smoke clears |
| Repeat | 7--12 s | Cycle repeats |
Particle History Tracking
In transient DPM, Fluent can record the full trajectory of each parcel at every time step.
Enabling history output
define/models/discrete-phase/sample/trajectory
solve/set/dpm-trajectory-frequency 1 (record every time step)
Output format
The trajectory file contains one line per parcel per time step:
Analysis
Post-process the trajectory file with Python (NumPy/Pandas) or MATLAB:
- Compute mean-square displacement vs. time
- Compute velocity autocorrelation function
- Generate animations (matplotlib or Paraview)
- Extract residence time distribution
Transient Post-Processing
Time-series concentration at a monitor point
1. Create a point surface at the breathing zone 2. Report Definitions > Volume Monitor > DPM Concentration at that point 3. The monitor writes concentration vs. time to a file 4. Plot in Excel, Python, or Fluent's built-in plotter
Animation
1. Graphics > Animation > Playback 2. Object: Contours of DPM Concentration 3. Set frame interval = 10 time steps 4. Play or export as video
Time-averaged concentration
After completing the transient run, use the time-averaging feature:
solve/set/time-averaging yes
Fluent accumulates time-averaged fields (including DPM concentration) starting from the current time step. Useful for comparing against steady-state predictions.
Coupling Strategy for Transient DPM
Weak coupling (segregated)
At each time step: 1. Solve continuous phase (1 step) 2. Track all particles (1 DPM iteration) 3. Deposit DPM source terms into continuous phase 4. Repeat
Strong coupling (coupled iteration)
At each time step: 1. Solve continuous phase + DPM together in an inner iteration loop 2. Repeat until coupled residuals converge (or max inner iterations reached) 3. Advance to next time step
Strong coupling is necessary when:
- Mass loading ratio > 5%
- DPM sources dominate the continuous-phase equations
- Two-way coupling causes divergence with weak coupling
For shisha transient
One-way coupling (current steady-state setting) is appropriate. If you add Brownian UDF or thermophoretic force, the DPM sources remain small compared to the flow. Switch to two-way only for validation or if you observe the flow field changing significantly due to particle momentum.
Performance Considerations
| Factor | Impact | Mitigation |
| -------- | -------- | ------------ |
Small dt (0.001 s) | 1000x more steps than steady | Run on cluster; parallelize |
| Stochastic tracking (DRW) | 10--50 tries per parcel | Reduce tries to 10 if statistics permit |
| Two-way coupling every step | Continuous phase must re-solve each step | Couple every 2--5 steps if acceptable |
| Trajectory recording | Large disk I/O | Record every 10 steps instead of every step |
| Many parcels (100,000+) | Memory + CPU | Reduce to 10,000 per injection; use adaptive injection |
Parallel DPM (transient)
DPM tracking is embarrassingly parallel once the flow field is known. Fluent distributes parcels across MPI ranks.
parallel/set/dpm (set load-balancing method)
solve/set/dpm-parallel yes
Validation: Transient vs. Steady Comparison
After running the transient case, compare the time-averaged concentration field to the steady-state prediction. If they match within 10--20%, the steady-state approximation is valid for your purposes and you can avoid the 100x cost of transient tracking.