The current solver should be treated as a constant-density low-Mach / incompressible projection code with optional passive species transport and optional passive sensible-enthalpy transport.
The projection density remains the configured flow density:
transport%rho = params%rho
Cantera thermodynamic density is stored separately as energy%rho_thermo and is diagnostic / future-use only. It must not be fed into the pressure projection until a separate variable-density low-Mach formulation is designed and validated.
The intended time-step ordering is:
1. Refresh transport properties on transport_update_interval.
- Cantera mu and D_k may use energy%T when energy is enabled.
- Flow density remains params%rho.
2. Advance momentum / pressure projection.
3. Advance species transport, if enabled.
4. Advance sensible enthalpy transport, if enabled.
- With Cantera thermo, sync T/cp/lambda/rho_thermo from h,Y,p0.
- If transported species are enabled, perform a pre-flux thermo sync after species transport.
- If species are disabled, the pre-flux thermo sync may be skipped because the previous post-flux sync is still valid.
- Always perform the post-flux thermo sync after h is updated.
5. Write diagnostics and VTU/PVTU output on output steps.
Supported in the current staged implementation:
- constant flow/projection density
- passive species mass-fraction transport
- passive sensible-enthalpy transport
- Fourier conduction driven by grad(T)
- Cantera h(T,Y,p0), T(h,Y,p0), cp, lambda, and diagnostic rho_thermo
- qrad storage and diagnostics with qrad initially zero unless a future coupling fills it
Not yet implemented:
- variable-density low-Mach divergence constraint
- reactions and reaction heat release
- species-diffusion enthalpy correction: -div(sum_k h_k J_k)
- external radiation physics
- radiation MPI/spectral decomposition
thermo_update_interval is reserved for future optimization. The current supported value is:
thermo_update_interval = 1
The solver may optimize internally using a combined thermo-sync call and conservative cache, but the logical thermodynamic state must remain synchronized every energy step.
For a fixed-temperature boundary with species enabled and Cantera thermo enabled, boundary enthalpy must use the boundary composition:
h_b = h(T_b, Y_b, p0)
where Y_b comes from the species boundary condition, such as patch_Y on fixed-value inlet patches. This avoids using an interior composition or a default bath-gas composition for fuel/oxidizer inlet enthalpy.