Construct a Reaction-Path Problem

A reaction-path problem bundles all computational ingredients needed to evaluate the quantum-mechanical ground-state energy of a sequence of molecular geometries (reaction path or scan). Each geometry is evaluated as a separate ground-state problem, with optional specialized handling for embedded calculations.

Goal

Build a reaction-path problem from a reaction configuration.

Prerequisites

Steps

  1. Create the reaction-path problem builder (simple case)

    The reaction_path() builder wraps a ground-state problem builder to run it over all geometries in the reaction configuration.

    • .simple(problem_builder): applies the same ground-state problem builder to every geometry.

    See Understanding and Using Kvantify Qrunch’s Fluent Builder Pattern for details on the builder pattern and how to use them.

    Example:

    import qrunch as qc
    
    # Create a simple reaction-path builder
    reaction_problem_builder = (
        qc.problem_builder_creator()
        .reaction_path()
        .simple(problem_builder)  # Required ground-state problem builder
        .create()
    )
    
  2. Build the reaction-path problem

    You can build either a restricted or unrestricted reaction-path problem, just like for single-geometry ground-state problems:

    # Unrestricted
    reaction_problem = reaction_problem_builder.build_unrestricted(reaction_configuration)
    
    # or Restricted
    reaction_problem = reaction_problem_builder.build_restricted(reaction_configuration)
    

    In both cases, the result is a reaction-path problem object containing one ground-state problem per geometry.

Alternative: Even-Handed Reaction Builder

The even_handed() reaction-path builder implements the Even-handed subsystem selection method (see doi:10.1063/1.5050533).

This approach:

  • Uses Wavefunction-in-DFT projection-based embedding

  • Selects subsystems consistently along the path

  • Accepts all configuration options of the projective_embedding ground-state problem builder (see Create a Projective-Embedding Ground-State Problem for details)

Example:

import qrunch as qc

even_handed_reaction_problem_builder = (
    qc.problem_builder_creator()
    .reaction_path()
    .even_handed()
    # Add .<projective_embedding options> here
    .create()
)

reaction_problem = even_handed_reaction_problem_builder.build_restricted(reaction_configuration)

See Also

Next Step

You can use the reaction-path problem to calculate energies along the path: