Skip to content

Commit 793fa7a

Browse files
sbryngelsonclaude
andcommitted
Add author-name citations, CI drift checks, and bib corrections
Post-process Doxygen HTML to transform bare [N] citation links into "Author et al. [N]" style, integrated into the CMake doc build. Extend lint_docs.py with cite key validation against references.bib and parameter name validation against the REGISTRY. Fix bib metadata (DOIs, published venues, author lists) and align keys with publication years. Remove stale hyper_cleaning recommendation from mhd dependency. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 3a8f9e3 commit 793fa7a

7 files changed

Lines changed: 491 additions & 109 deletions

File tree

CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,8 @@ if (MFC_DOCUMENTATION)
753753
"${opt_parameters_dependency}"
754754
"${${target}_SRCs}" "${${target}_DOCs}"
755755
COMMAND "${DOXYGEN_EXECUTABLE}" "${target}-Doxyfile"
756+
COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/docs/postprocess_citations.py"
757+
"${CMAKE_CURRENT_BINARY_DIR}/${target}"
756758
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
757759
COMMENT "${target}: Generating documentation"
758760
)
@@ -772,6 +774,7 @@ if (MFC_DOCUMENTATION)
772774
add_custom_target(documentation)
773775

774776
find_package(Doxygen REQUIRED dot REQUIRED)
777+
find_package(Python3 REQUIRED COMPONENTS Interpreter)
775778

776779
# > Fetch CSS Theme
777780
ExternalProject_Add(doxygen-awesome-css

docs/documentation/case.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ Details of implementation of viscosity in MFC can be found in \cite Coralic15.
421421
| `riemann_solver` | Integer | Riemann solver algorithm: [1] HLL*; [2] HLLC; [3] Exact*; [4] HLLD (only for MHD) |
422422
| `low_Mach` | Integer | Low Mach number correction for HLLC Riemann solver: [0] None; [1] Pressure (\cite Chen22); [2] Velocity (\cite Thornber08) |
423423
| `avg_state` | Integer | Averaged state evaluation method: [1] Roe average*; [2] Arithmetic mean |
424-
| `wave_speeds` | Integer | Wave-speed estimation: [1] Direct (\cite Batten97); [2] Pressure-velocity* (\cite Toro13) |
424+
| `wave_speeds` | Integer | Wave-speed estimation: [1] Direct (\cite Batten97); [2] Pressure-velocity* (\cite Toro09) |
425425
| `weno_Re_flux` | Logical | Compute velocity gradient using scalar divergence theorem |
426426
| `weno_avg` | Logical | Arithmetic mean of left and right, WENO-reconstructed, cell-boundary values |
427427
| `dt` | Real | Time step size |
@@ -452,7 +452,7 @@ Details of implementation of viscosity in MFC can be found in \cite Coralic15.
452452

453453
The table lists simulation algorithm parameters.
454454
The parameters are used to specify options in algorithms that are used to integrate the governing equations of the multi-component flow based on the initial condition.
455-
Models and assumptions that are used to formulate and discretize the governing equations are described in \cite Bryngelson19.
455+
Models and assumptions that are used to formulate and discretize the governing equations are described in \cite Wilfong26 and \cite Bryngelson21.
456456
Details of the simulation algorithms and implementation of the WENO scheme can be found in \cite Coralic15.
457457

458458
- `bc_[x,y,z]%[beg,end]` specifies the boundary conditions at the beginning and the end of domain boundaries in each coordinate direction by a negative integer from -1 through -16.
@@ -468,11 +468,11 @@ Tangential velocities require viscosity, `weno_avg = T`, and `bc_[x,y,z]%%end =
468468

469469
- `model_eqns` specifies the choice of the multi-component model that is used to formulate the dynamics of the flow using integers from 1 through 3.
470470
`model_eqns = 1`, `2`, and `3` correspond to $\Gamma$-$\Pi_\infty$ model (\cite Johnsen08), 5-equation model (\cite Allaire02), and 6-equation model (\cite Saurel09), respectively.
471-
The difference of the two models is assessed by (\cite Schmidmayer19).
471+
The difference of the two models is assessed by (\cite Schmidmayer20).
472472
Note that some code parameters are only compatible with 5-equation model.
473473

474474
- `alt_soundspeed` activates the source term in the advection equations for the volume fractions, $K\nabla\cdot \underline{u}$, that regularizes the speed of sound in the mixture region when the 5-equation model is used.
475-
The effect and use of the source term are assessed by \cite Schmidmayer19.
475+
The effect and use of the source term are assessed by \cite Schmidmayer20.
476476

477477
- `adv_n` activates the direct computation of number density by the Riemann solver instead of computing number density from the void fraction in the method of classes.
478478

@@ -512,7 +512,7 @@ It is recommended to set `weno_eps` to $10^{-6}$ for WENO-JS, and to $10^{-40}$
512512
- `int_comp` activates interface compression using THINC used in MUSCL Reconstruction, with control parameters (`ic_eps`, and `ic_beta`).
513513

514514
- `riemann_solver` specifies the choice of the Riemann solver that is used in simulation by an integer from 1 through 4.
515-
`riemann_solver = 1`, `2`, and `3` correspond to HLL, HLLC, and Exact Riemann solver, respectively (\cite Toro13).
515+
`riemann_solver = 1`, `2`, and `3` correspond to HLL, HLLC, and Exact Riemann solver, respectively (\cite Toro09).
516516
`riemann_solver = 4` is only for MHD simulations. It resolves 5 of the full seven-wave structure of the MHD equations (\cite Miyoshi05).
517517

518518
- `low_Mach` specifies the choice of the low Mach number correction scheme for the HLLC Riemann solver. `low_Mach = 0` is default value and does not apply any correction scheme. `low_Mach = 1` and `2` apply the anti-dissipation pressure correction method (\cite Chen22) and the improved velocity reconstruction method (\cite Thornber08). This feature requires `model_eqns = 2` or `3`. `low_Mach = 1` works for `riemann_solver = 1` and `2`, but `low_Mach = 2` only works for `riemann_solver = 2`.
@@ -521,7 +521,7 @@ It is recommended to set `weno_eps` to $10^{-6}$ for WENO-JS, and to $10^{-40}$
521521
`avg_state = 1` and `2` correspond to Roe- and arithmetic averages, respectively.
522522

523523
- `wave_speeds` specifies the choice of the method to compute the left, right, and middle wave speeds in the Riemann solver by an integer of 1 and 2.
524-
`wave_speeds = 1` and `2` correspond to the direct method (\cite Batten97), and indirect method that approximates the pressures and velocity (\cite Toro13), respectively.
524+
`wave_speeds = 1` and `2` correspond to the direct method (\cite Batten97), and indirect method that approximates the pressures and velocity (\cite Toro09), respectively.
525525

526526
- `weno_Re_flux` activates the scalar divergence theorem in computing the velocity gradients using WENO-reconstructed cell boundary values.
527527
If this option is false, velocity gradient is computed using finite difference scheme of order 2 which is independent of the WENO order.

docs/documentation/equations.md

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
This document catalogs every equation solved by MFC, organized by physical model.
66
Each section notes the input parameter(s) that activate the corresponding physics module and cross-references the relevant source files.
77

8-
For full citations of MFC papers, see @ref papers. Foundational references for each model are cited inline; see the \ref citelist "Bibliography" for full details.
8+
The models and algorithms described here are detailed in \cite Wilfong26 (MFC 5.0) and \cite Bryngelson21. Foundational references for each model are cited inline; see the \ref citelist "Bibliography" for full details.
99

1010
---
1111

@@ -31,7 +31,7 @@ The parameter `model_eqns` (1, 2, 3, or 4) selects the governing equation set.
3131

3232
### 2.1 Five-Equation Model (`model_eqns = 2`)
3333

34-
The primary workhorse model (\cite Allaire02). The state vector is:
34+
The primary workhorse model (\cite Allaire02; \cite Wilfong26 Sec. 2.1). The state vector is:
3535

3636
\f[\mathbf{q} = \bigl(\alpha_1 \rho_1,\;\alpha_2 \rho_2,\;\ldots,\;\rho u_1,\;\rho u_2,\;\rho u_3,\;\rho E,\;\alpha_1,\;\alpha_2,\;\ldots\bigr)^T\f]
3737

@@ -63,7 +63,7 @@ Setting `alt_soundspeed = .true.` enables the \f$K\f$ correction (\cite Kapila01
6363

6464
### 2.2 Six-Equation Model (`model_eqns = 3`)
6565

66-
Allows pressure disequilibrium between phases (\cite Saurel09).
66+
Allows pressure disequilibrium between phases (\cite Saurel09; \cite Wilfong26 Sec. 2.1).
6767

6868
**Continuity and momentum:** Same as the five-equation model.
6969

@@ -101,7 +101,7 @@ See Section 8 (Phase Change) below for details.
101101

102102
## 3. Equations of State
103103

104-
### 3.1 Stiffened Gas EOS (\cite Menikoff89; \cite LeMetayer04)
104+
### 3.1 Stiffened Gas EOS (\cite Menikoff89; \cite LeMetayer04; \cite Wilfong26 Sec. 2.2)
105105

106106
The primary closure for each phase:
107107

@@ -151,7 +151,7 @@ Temperature is obtained from the internal energy by Newton iteration:
151151

152152
\f[e_m(T) = \frac{\hat{h}_m(T) - R_u\,T}{W_m}\f]
153153

154-
**NASA polynomial enthalpies** (\cite McBride93)**:**
154+
**NASA polynomial enthalpies** (\cite McBride93):
155155

156156
\f[\frac{\hat{h}_m}{R_u\,T} = \frac{C_0}{T} + \sum_{r=1}^{5} \frac{C_r\,T^{r-1}}{r}\f]
157157

@@ -185,7 +185,7 @@ Input parameters: `Re_inv` (shear and volume Reynolds numbers per fluid).
185185

186186
---
187187

188-
## 5. Cylindrical Coordinates (`cyl_coord = .true.`)
188+
## 5. Cylindrical Coordinates (`cyl_coord = .true.`) (\cite Wilfong26 Sec. 2.3)
189189

190190
Additional geometric source terms appear with \f$1/r\f$ factors in the continuity, momentum, and energy equations. Key modifications:
191191

@@ -198,7 +198,7 @@ Additional geometric source terms appear with \f$1/r\f$ factors in the continuit
198198

199199
---
200200

201-
## 6. Sub-Grid Bubble Dynamics
201+
## 6. Sub-Grid Bubble Dynamics (\cite Wilfong26 Sec. 4.1)
202202

203203
### 6.1 Euler-Euler Bubbles (`bubbles_euler = .true.`)
204204

@@ -262,7 +262,7 @@ and the local liquid sound speed:
262262

263263
\f[\dot{m}_v = \frac{D\,\rho_{bw}}{1 - \chi_{vw}}\left.\frac{\partial \chi_v}{\partial r}\right|_R\f]
264264

265-
#### 6.1.6 QBMM Moment Transport (`qbmm = .true.`) (\cite Bryngelson23)
265+
#### 6.1.6 QBMM Moment Transport (`qbmm = .true.`) (\cite Bryngelson20)
266266

267267
**Population balance equation:**
268268

@@ -314,7 +314,7 @@ Each bubble is tracked individually with Keller-Miksis dynamics and 4th-order ad
314314

315315
## 7. Fluid-Structure Interaction
316316

317-
### 7.1 Hypoelastic Model (`hypoelasticity = .true.`) (\cite Rodriguez19)
317+
### 7.1 Hypoelastic Model (`hypoelasticity = .true.`) (\cite Rodriguez19; \cite Wilfong26 Sec. 4.1.6)
318318

319319
**Source:** `src/simulation/m_hypoelastic.fpp`
320320

@@ -342,7 +342,7 @@ where \f$\mathbf{l} = \nabla \mathbf{u}\f$ is the velocity gradient and \f$\math
342342

343343
This adds 6 additional transport equations in 3D (symmetric stress tensor: \f$\tau_{xx}^e, \tau_{xy}^e, \tau_{yy}^e, \tau_{xz}^e, \tau_{yz}^e, \tau_{zz}^e\f$).
344344

345-
### 7.2 Hyperelastic Model (`hyperelasticity = .true.`) (\cite Kamrin12)
345+
### 7.2 Hyperelastic Model (`hyperelasticity = .true.`) (\cite Kamrin12; \cite Wilfong26 Sec. 4.1.6)
346346

347347
**Source:** `src/simulation/m_hyperelastic.fpp`
348348

@@ -370,7 +370,7 @@ where \f$J = \det(\mathbf{F})\f$.
370370

371371
---
372372

373-
## 8. Phase Change (`relax = .true.`)
373+
## 8. Phase Change (`relax = .true.`) (\cite Wilfong26 Sec. 4.1.3)
374374

375375
**Source:** `src/common/m_phase_change.fpp`
376376

@@ -408,7 +408,7 @@ Solved via 2D Newton-Raphson.
408408

409409
---
410410

411-
## 9. Chemistry and Combustion (`chemistry = .true.`)
411+
## 9. Chemistry and Combustion (`chemistry = .true.`) (\cite Wilfong26 Sec. 4.1.7)
412412

413413
**Source:** `src/common/m_chemistry.fpp`
414414

@@ -436,11 +436,11 @@ Enthalpy flux with diffusion:
436436

437437
\f[q_\text{diff} = \lambda\,\frac{\partial T}{\partial x} + \sum_k h_k\,\dot{m}_k\f]
438438

439-
Reaction mechanisms are code-generated via Pyrometheus (\cite Cisneros25), which provides symbolic abstractions for thermochemistry that enable portable GPU computation and automatic differentiation of chemical source terms.
439+
Reaction mechanisms are code-generated via Pyrometheus (\cite Cisneros26), which provides symbolic abstractions for thermochemistry that enable portable GPU computation and automatic differentiation of chemical source terms.
440440

441441
---
442442

443-
## 10. Surface Tension (`surface_tension = .true.`) (\cite Schmidmayer17)
443+
## 10. Surface Tension (`surface_tension = .true.`) (\cite Schmidmayer17; \cite Wilfong26 Sec. 4.1.8)
444444

445445
**Source:** `src/simulation/m_surface_tension.fpp`, `src/simulation/include/inline_capillary.fpp`
446446

@@ -468,7 +468,7 @@ The capillary stress divergence is added to the momentum and energy equations. T
468468

469469
## 11. Magnetohydrodynamics
470470

471-
### 11.1 Ideal MHD (`mhd = .true.`)
471+
### 11.1 Ideal MHD (`mhd = .true.`) (\cite Wilfong26 Sec. 4.1.9)
472472

473473
**Continuity:**
474474

@@ -498,9 +498,9 @@ The capillary stress divergence is added to the momentum and energy equations. T
498498

499499
\f[v_A = \sqrt{\frac{|\mathbf{B}|^2}{\rho}}\f]
500500

501-
Uses the HLLD Riemann solver (`riemann_solver = 3`). Hyperbolic divergence cleaning (`hyper_cleaning = .true.`) via the GLM method (\cite Dedner02).
501+
Uses the HLLD Riemann solver (`riemann_solver = 4`). Hyperbolic divergence cleaning (`hyper_cleaning = .true.`) via the GLM method (\cite Dedner02).
502502

503-
### 11.2 Relativistic MHD (`relativity = .true.`)
503+
### 11.2 Relativistic MHD (`relativity = .true.`) (\cite Wilfong26 Sec. 4.1.10)
504504

505505
**Conserved variables:**
506506

@@ -542,7 +542,7 @@ Uses Lax-Friedrichs flux (replaces WENO + Riemann solver).
542542

543543
---
544544

545-
## 13. Body Forces (`bodyforces = .true.`)
545+
## 13. Body Forces (`bf_x`, `bf_y`, `bf_z`)
546546

547547
**Source:** `src/simulation/m_body_forces.fpp`
548548

@@ -641,7 +641,7 @@ where \f$a\f$ and \f$b\f$ are the left and right slope differences.
641641

642642
\f[q_\text{THINC} = q_\min + \frac{q_\max}{2}\left(1 + \text{sign}(s)\,\frac{\tanh(\beta) + A}{1 + A\,\tanh(\beta)}\right)\f]
643643

644-
where \f$A = \exp(\text{sign}(s)\,\beta\,(2C - 1)) / \cosh(\beta) - 1) / \tanh(\beta)\f$ and \f$\beta\f$ controls compression steepness.
644+
where \f$A = \frac{\exp(\text{sign}(s)\,\beta\,(2C - 1))\,/\,\cosh(\beta) - 1}{\tanh(\beta)}\f$ and \f$\beta\f$ controls compression steepness.
645645

646646
#### IGR Reconstruction
647647

@@ -667,7 +667,11 @@ Four-state solver resolving the contact discontinuity. Star-state satisfies:
667667

668668
\f[p_L^* = p_R^* = p^*, \qquad u_L^* = u_R^* = u^*\f]
669669

670-
#### HLLD (`riemann_solver = 3`, MHD only)
670+
#### Exact (`riemann_solver = 3`)
671+
672+
Iterative exact Riemann solver.
673+
674+
#### HLLD (`riemann_solver = 4`, MHD only)
671675

672676
Seven-state solver for ideal MHD resolving fast magnetosonic, Alfven, and contact waves (\cite Miyoshi05). The Riemann fan is divided by outer wave speeds \f$S_L\f$, \f$S_R\f$, Alfven speeds \f$S_L^*\f$, \f$S_R^*\f$, and a middle contact \f$S_M\f$:
673677

@@ -677,10 +681,6 @@ Seven-state solver for ideal MHD resolving fast magnetosonic, Alfven, and contac
677681

678682
where \f$p_T = p + |\mathbf{B}|^2/2\f$ is the total (thermal + magnetic) pressure. Continuity of normal velocity and total pressure is enforced across the Riemann fan.
679683

680-
#### Exact (`riemann_solver = 4`)
681-
682-
Iterative exact Riemann solver.
683-
684684
### 15.3 Time Integration
685685

686686
**Source:** `src/simulation/m_time_steppers.fpp`
@@ -705,7 +705,7 @@ Iterative exact Riemann solver.
705705

706706
\f[\mathbf{q}^{n+1} = \frac{1}{3}\mathbf{q}^n + \frac{2}{3}\mathbf{q}^{(2)} + \frac{2}{3}\Delta t\,\mathbf{L}(\mathbf{q}^{(2)})\f]
707707

708-
#### Adaptive Time Stepping (`adapt_dt = .true.`)
708+
#### Adaptive Time Stepping (`adap_dt = .true.`)
709709

710710
Embedded RK pairs for error estimation with Hairer-Norsett-Wanner algorithm for initial step size.
711711

@@ -783,7 +783,7 @@ Used for viscous fluxes and velocity gradients.
783783

784784
**Characteristic amplitudes** \f$\mathcal{L}_1\f$ through \f$\mathcal{L}_5\f$ define wave interactions at boundaries:
785785

786-
\f[\mathcal{L}_1 = (u - c)\left(\frac{\partial p}{\partial x} - \rho\,c\,\frac{\partial u}{\partial x}\right), \qquad \mathcal{L}_2 = a\left(\frac{\partial \rho}{\partial x} + \frac{2}{\partial x}\frac{\partial p}{\partial x}\right)\f]
786+
\f[\mathcal{L}_1 = (u - c)\left(\frac{\partial p}{\partial x} - \rho\,c\,\frac{\partial u}{\partial x}\right), \qquad \mathcal{L}_2 = u\left(c^2\,\frac{\partial \rho}{\partial x} - \frac{\partial p}{\partial x}\right)\f]
787787

788788
\f[\mathcal{L}_3 = u\,\frac{\partial v}{\partial x}, \qquad \mathcal{L}_4 = u\,\frac{\partial w}{\partial x}, \qquad \mathcal{L}_5 = (u + c)\left(\frac{\partial p}{\partial x} + \rho\,c\,\frac{\partial u}{\partial x}\right)\f]
789789

@@ -795,7 +795,7 @@ For non-reflecting boundaries, the incoming wave amplitudes are set to zero.
795795

796796
**8 types:** slip wall (`-5`), non-reflecting buffer (`-6`), non-reflecting sub. inflow (`-7`), non-reflecting sub. outflow (`-8`), force-free sub. outflow (`-9`), constant-pressure sub. outflow (`-10`), supersonic inflow (`-11`), supersonic outflow (`-12`).
797797

798-
### 16.3 Immersed Boundary Method (`ib = .true.`) (\cite Tseng03; \cite Mittal05)
798+
### 16.3 Immersed Boundary Method (`ib = .true.`) (\cite Tseng03; \cite Mittal05; \cite Wilfong26 Sec. 4.1.1)
799799

800800
**Source:** `src/simulation/m_ibm.fpp`
801801

@@ -815,7 +815,7 @@ Supports STL/OBJ geometry import with ray tracing for inside/outside determinati
815815

816816
---
817817

818-
## 17. Low Mach Number Corrections
818+
## 17. Low Mach Number Corrections (\cite Wilfong26 Sec. 4.2.4)
819819

820820
**Thornber correction** (`low_Mach = 1`, \cite Thornber08): modifies the reconstructed velocities at cell interfaces:
821821

0 commit comments

Comments
 (0)