Direct MaxFlux (DMF)
Overview
Direct MaxFlux (DMF) is a double-ended transition-state search method for reactions with known reactant and product structures. It is based on the variational MaxFlux formulation of Koda and Saito, where the reaction path is optimized by minimizing a finite-temperature line integral of exp(beta E). In the large-beta limit this objective approaches a smooth minimax search for the lowest possible path maximum, so the optimized path approaches the MEP and its highest-energy point approaches the TS.
MAPLE represents the DMF path as a B-spline curve, builds an initial path with FB-ENM by default, evaluates energies and forces through the selected MAPLE calculator, and can optionally hand the t_max structure to P-RFO or Dimer refinement.
DMF depends on cyipopt for nonlinear constrained optimization. Install it before running #ts(method=dmf), for example with conda install -c conda-forge cyipopt.
How It Works
- Endpoint preparation. DMF starts from reactant and product structures, and can also accept an explicit multi-frame path.
- Initial path generation. If
coefsis not provided,init_path=fbenmbuilds FB-ENM/CFB-ENM B-spline control points. Useinit_path=linearfor a lighter linear B-spline initialization. - MaxFlux path optimization. IPOPT optimizes the B-spline path variables subject to endpoint constraints. The objective favors high reactive flux across the barrier region rather than spring-balanced image spacing.
- TS guess selection. MAPLE evaluates the optimized path and writes the highest-energy point as
t_max. - Optional refinement. With
refine=prfoorrefine=dimer, MAPLE starts the chosen single-ended TS optimizer from the DMFt_maxstructure.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
backend |
str | numpy |
Tensor backend for DMF path algebra: numpy or torch. The torch backend inherits the calculator device when available. |
beta |
float | 10.0 | Reciprocal temperature used by the MaxFlux objective, in 1/eV. |
nmove |
int | 10 | Number of movable energy-evaluation points along the B-spline path. |
nsegs |
int | 6 | Number of B-spline path segments. Increase together with nmove when the reaction path needs more flexibility. |
dspl |
int | 3 | B-spline polynomial degree. |
update_teval |
bool | False | Adaptively update evaluation points toward the barrier. Keep false for more uniform output spacing. |
coefs |
object | None | Explicit initial B-spline control points, or a .npy file containing them. Shape must be (nsegs + dspl, natoms, 3). When set, DMF skips FB-ENM and linear path generation. |
t_eval |
object | None | Energy-evaluation grid as a sequence, CSV string, .npy, or .txt file. Custom grids must be one-dimensional, strictly increasing, start at 0, end at 1, and have length nmove + 2. |
w_eval |
object | None | Quadrature weights matching t_eval. Custom weights require update_teval=false. |
init_path |
str | fbenm |
Initial path builder: fbenm or linear. |
fbenm_correlated |
bool | True | Use correlated FB-ENM geometry processing when generating the initial path. |
mass_weighted |
bool | False | Use a mass-weighted velocity norm in the path objective. |
remove_rotation_and_translation |
bool | True | Project global translation and rotation out of the path velocity norm. |
tol |
str or float | tight |
IPOPT convergence preset: tight, middle, loose, or an explicit numeric tolerance. |
max_iter |
int | 200 | Maximum IPOPT iterations for the Direct MaxFlux optimization. |
ipopt_out |
bool | False | Write native IPOPT output files for the FB-ENM and final DMF nonlinear optimizations. |
refine |
str | None | Optional local TS refinement from t_max: prfo or dimer. |
Input Example
Checked-in MAPLE example: examples/ts/dmf/inp3.inp. The portable form below is for an input file saved in examples/ts/dmf; if you save it elsewhere, adjust the XYZ paths because relative paths are resolved from the input file location.
#model=fennix-bio1m
#ts(method=dmf,refine=prfo)
#device=gpu0
XYZ react.xyz
XYZ prod.xyz
For larger systems, the tensor backend can be switched while keeping the calculator/device selection in the usual MAPLE input layer:
#ts(method=dmf,backend=torch,refine=prfo,nmove=14,nsegs=8)
Output Files
*_dmf_mep.xyzor*_dmf_mep.pdb: Optimized DMF path written as the MEP/MaxFlux path estimate.*_dmf_tmax.xyzor*_dmf_tmax.pdb: Highest-energy point on the optimized DMF path, used as the TS guess.*_dmf_tmax_traj.xyzor*_dmf_tmax_traj.pdb: History of thet_maxstructure during DMF optimization.*_dmf_refine_prfo_ts.xyzand*_dmf_refine_prfo_traj.xyz: P-RFO refinement outputs whenrefine=prfo.*_dmf_refine_dimer_ts.xyzand*_dmf_refine_dimer_traj.xyz: Dimer refinement outputs whenrefine=dimer.*_dmf_ipopt.outand*_dmf_fbenm_ipopt.out: Native IPOPT logs whenipopt_out=true.
Refinement
DMF itself does not use Hessians. It produces a path-based t_max TS guess, then delegates optional local refinement to the requested single-ended TS method. Use refine=prfo when a local Hessian-based saddle optimizer is appropriate, or refine=dimer when you prefer minimum-mode following from the DMF guess.
Comparison with NEB and String/GSM
NEB, String/GSM, and DMF are all double-ended path methods, but they pose the path problem differently. NEB and String/GSM are direct MEP construction methods based on projected forces or string reparameterization. DMF is a variational MaxFlux optimization: it minimizes a scalar path functional that becomes a smooth approximation to the path minimax problem as beta increases.
| Aspect | NEB | String/GSM | DMF |
|---|---|---|---|
| Core formulation | Projected force balance on a chain of images with spring forces along the tangent. | String evolution with node redistribution or growth between fixed endpoints. | Variational minimization of a MaxFlux line integral, log integral exp(beta E) ds. |
| Path representation | Discrete images connected by springs. | Discrete string nodes grown or reparameterized along the path. | Continuous B-spline path with optimized control points and separate energy-evaluation points. |
| MEP and TS relation | Converges toward the MEP; the HEI or CI image gives the TS estimate. | Converges toward a reparameterized MEP; the HEI is used for String-TS finalization. | Approaches the MEP/TS in the beta -> infinity limit; finite beta gives a practical t_max TS guess. |
| Energy derivatives | Uses forces at images; CI-NEB still does not require Hessians. | Uses forces at string nodes and local relaxation steps. | The objective contains energies only; its analytic gradient uses forces, not Hessians. |
Practical Guidance
- Optimize reactant and product endpoints before running DMF, just as with NEB and String/GSM.
- Increase
nmovefor more energy-evaluation points, and increasensegswhen the B-spline path itself needs more geometric flexibility. - Keep
update_teval=falsewhen you want the written path frames to remain visually smooth and evenly distributed. - Use
backend=torchwhen the torch backend is available and path/geometry tensor operations dominate the overhead; energy and force calls still go through the selected MAPLE calculator. - Use
ipopt_out=trueonly when you need native IPOPT diagnostics.
