DVR Series - Part VI
Flux-Side Kubo Correlation
The flux-side correlation function is a rate-like observable. It asks how much probability crosses a dividing surface and later remains on the product side. In DVR, that idea becomes a side projector, a commutator-defined flux operator, and a thermal Kubo weight.
Classical picture
The classical flux-side form is
For free motion \(x(t)=x_0+vt\), the delta function selects trajectories starting at the dividing surface and the side function checks whether they are on the product side at time \(t\).
Quantum side and flux operators
The side operator is
The flux operator follows from the Heisenberg time derivative of \(h(t)\):
In an energy basis, this also implies \(F_{nm}=\frac{i}{\hbar}(E_n-E_m)h_{nm}\) when the same Hamiltonian defines the basis.
Kubo flux-side formula
The Kubo-transformed flux-side expression used in the source notes is
Inserting energy eigenstates gives the same thermal kernel as the position Kubo note:
Why compute flux-flux first?
The direct \(C_{fs}\) calculation can decay when a complex absorbing potential removes amplitude after the packet reaches the absorbing region. A more stable route is to compute the flux-flux correlation and then integrate:
The source note uses the real Hamiltonian for the thermal Kubo weighting and the absorbing Hamiltonian only for real-time propagation. This keeps the Boltzmann kernel physical while damping boundary reflections during the real-time part.
CAP and Schur propagation
With a complex absorbing potential, the propagation Hamiltonian is non-Hermitian:
The source workflow uses a complex Schur decomposition,
so real-time factors can be evaluated with the triangular matrix \(T\). This is numerically safer than relying directly on ill-conditioned eigenvectors of a non-normal matrix.
Numerical results
Operator implementation
def side_projector(x, dividing_surface=0.0):
return np.diag((x > dividing_surface).astype(float))
def flux_operator(hamiltonian, side, hbar=1.0):
return 1j / hbar * (hamiltonian @ side - side @ hamiltonian)
The flux-side calculation combines the pieces built earlier in the series: Part I establishes the finite Hamiltonian, Part II identifies the side and flux matrices, Parts III-IV describe pure-state and density-matrix propagation, and Part V supplies the thermal Kubo spectral kernel. Part VII reuses this machinery with local adiabatic projectors to form a population-resolved transfer diagnostic.
Code used in this note
- dvr_kubo_minimal.py contains the shared side projector, flux commutator, and Kubo kernel.
- source/flux-side-kubo/utils/quantum.py preserves the flux-side quantum utility routines from the working code folder.
- source/flux-side-kubo/utils/classical.py contains the matching classical helper routines used for comparison tests.
- source/flux-side-kubo/reference-data/Cfs_real_data.txt, Cfs_real_data_adi.txt, and Cfs_real_data_dia.txt are the small reference datasets used while checking the flux-side curves.