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.

Note

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

  1. Endpoint preparation. DMF starts from reactant and product structures, and can also accept an explicit multi-frame path.
  2. Initial path generation. If coefs is not provided, init_path=fbenm builds FB-ENM/CFB-ENM B-spline control points. Use init_path=linear for a lighter linear B-spline initialization.
  3. 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.
  4. TS guess selection. MAPLE evaluates the optimized path and writes the highest-energy point as t_max.
  5. Optional refinement. With refine=prfo or refine=dimer, MAPLE starts the chosen single-ended TS optimizer from the DMF t_max structure.

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.xyz or *_dmf_mep.pdb: Optimized DMF path written as the MEP/MaxFlux path estimate.
  • *_dmf_tmax.xyz or *_dmf_tmax.pdb: Highest-energy point on the optimized DMF path, used as the TS guess.
  • *_dmf_tmax_traj.xyz or *_dmf_tmax_traj.pdb: History of the t_max structure during DMF optimization.
  • *_dmf_refine_prfo_ts.xyz and *_dmf_refine_prfo_traj.xyz: P-RFO refinement outputs when refine=prfo.
  • *_dmf_refine_dimer_ts.xyz and *_dmf_refine_dimer_traj.xyz: Dimer refinement outputs when refine=dimer.
  • *_dmf_ipopt.out and *_dmf_fbenm_ipopt.out: Native IPOPT logs when ipopt_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 nmove for more energy-evaluation points, and increase nsegs when the B-spline path itself needs more geometric flexibility.
  • Keep update_teval=false when you want the written path frames to remain visually smooth and evenly distributed.
  • Use backend=torch when 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=true only when you need native IPOPT diagnostics.