FDR Temperature¶
Fluctuation-Dissipation Ratio (FDR) temperature measurement for mode-specific effective temperatures in non-equilibrium cavity-coupled systems.
Overview¶
The Fluctuation-Dissipation Ratio (FDR) provides a physics-based method for measuring effective temperatures in systems that violate thermal equilibrium, such as cavity-coupled molecular systems under strong coupling.
Key Concept:
In thermal equilibrium, the fluctuation-dissipation theorem relates the autocorrelation function C(t) to the linear response function χ(t):
For non-equilibrium systems, this relation is violated, and we can define an effective temperature:
Where:
\(S_{AA}(\omega_0,t)\): Power spectral density (fluctuations)
\(\chi''(\omega_0,t)\): Imaginary susceptibility (dissipation)
\(\omega_0\): Probe frequency
\(k_B\): Boltzmann constant
Physical Interpretation:
\(T_{\text{eff}} = T\): System in thermal equilibrium
\(T_{\text{eff}} \neq T\): Non-equilibrium state
Mode-specific: Different frequencies can have different effective temperatures
Implementation¶
FDR Temperature Estimator¶
Streaming algorithm for real-time effective temperature:
from cavitymd import FDRTemperatureEstimator
# Create estimator for dipole moment at cavity frequency
fdr_estimator = FDRTemperatureEstimator(
observable_name='dipole',
probe_frequency_cm=2000.0, # Cavity frequency
time_tracker=time_tracker,
update_interval_ps=0.1,
window_size_ps=10.0, # Sliding window
perturbation_amplitude=0.01 # External field amplitude
)
# Computes T_eff(ω_cavity, t) in real-time
Algorithm:
Measure fluctuations: Compute \(S_{\mu\mu}(\omega_0,t)\) from equilibrium trajectory
Measure response: Apply perturbation, measure \(\chi''_{\mu}(\omega_0,t)\)
Compute FDR: \(T_{\text{eff}} = \frac{\omega_0}{2k_B} \frac{S_{\mu\mu}}{\chi''_{\mu}}\)
FDR Integration with Simulations¶
Seamless integration with CavityMDSimulation:
from cavitymd import FDRIntegration
# Add FDR analysis to simulation
fdr_integration = FDRIntegration(
simulation=sim,
observable='dipole',
probe_frequency_cm=sim.freq, # Use cavity frequency
enable_equilibrium_phase=True,
equilibrium_duration_ps=100.0,
enable_response_phase=True,
response_duration_ps=100.0,
perturbation_field_strength=0.01
)
# Automatically handles:
# 1. Equilibrium trajectory collection
# 2. Perturbation application
# 3. Response measurement
# 4. FDR calculation
Complete FDR Workflow¶
End-to-end analysis pipeline:
from cavitymd import FDRWorkflow
# Complete workflow
workflow = FDRWorkflow(
job_dir='fdr_analysis',
temperature=100.0,
coupling=0.001,
frequency=2000.0,
# Phase 1: Equilibrium
equilibrium_duration_ps=200.0,
# Phase 2: Response
response_duration_ps=200.0,
perturbation_amplitude=0.01,
# Analysis
output_file='fdr_results.h5'
)
# Run complete workflow
workflow.run()
# Access results
results = workflow.get_results()
print(f"Effective temperature: {results['T_eff']:.2f} K")
print(f"FDR violation: {results['fdr_ratio']:.3f}")
Mathematical Details¶
Autocorrelation Function¶
Equilibrium dipole autocorrelation:
Power spectral density:
In practice, computed via FFT of finite-time correlation.
Linear Response Function¶
Apply external field \(E(t) = E_0 \cos(\omega_0 t)\):
Extract imaginary part:
Effective Temperature¶
FDR-based effective temperature:
Interpretation:
Quantifies energy distribution at specific frequency
Different from kinetic temperature
Mode-specific: vibrational vs translational
Practical Examples¶
Example 1: Cavity Frequency FDR¶
Measure effective temperature at cavity resonance:
from cavitymd import FDRTemperatureEstimator
from cavitymd.analysis import DipoleMomentFDRTracker
# Setup FDR tracker
fdr_tracker = DipoleMomentFDRTracker(
simulation=sim,
time_tracker=time_tracker,
probe_frequency_cm=2000.0, # Cavity frequency
reference_interval_ps=10.0,
output_period_ps=1.0
)
# Add to simulation
sim.operations.updaters.append(hoomd.update.CustomUpdater(
action=fdr_tracker,
trigger=hoomd.trigger.Periodic(1)
))
# Run and monitor
sim.run(100000)
# Get effective temperature history
T_eff_history = fdr_tracker.get_temperature_history()
Example 2: Multi-Frequency FDR Scan¶
Scan multiple frequencies:
import numpy as np
# Frequency range
frequencies = np.linspace(1500, 2500, 20) # cm^-1
T_eff_vs_freq = []
for freq in frequencies:
# Create FDR estimator for this frequency
fdr = FDRTemperatureEstimator(
observable_name='dipole',
probe_frequency_cm=freq,
time_tracker=time_tracker,
window_size_ps=50.0
)
# Run analysis
result = fdr.analyze(equilibrium_traj, response_traj)
T_eff_vs_freq.append(result['T_eff'])
# Plot frequency-dependent effective temperature
plt.plot(frequencies, T_eff_vs_freq)
plt.xlabel('Frequency (cm⁻¹)')
plt.ylabel('Effective Temperature (K)')
Example 3: Time-Resolved FDR¶
Monitor FDR evolution during non-equilibrium process:
from cavitymd import FDRIntegration
# Setup with short windows for time resolution
fdr = FDRIntegration(
simulation=sim,
observable='dipole',
probe_frequency_cm=2000.0,
window_size_ps=5.0, # Short window
update_interval_ps=0.5 # Frequent updates
)
# Run simulation with coupling switch
sim.run(initial_equilibration_steps)
# Switch coupling ON
cavity_force.couplstr = 0.001
# Monitor T_eff evolution
sim.run(observation_steps)
# Get time-resolved effective temperature
times, T_eff = fdr.get_time_series()
# Observe relaxation to new equilibrium
plt.plot(times, T_eff)
plt.axhline(y=100.0, color='r', linestyle='--', label='Bath T')
plt.xlabel('Time (ps)')
plt.ylabel('T_eff (K)')
Physical Interpretation¶
Equilibrium vs Non-Equilibrium¶
Equilibrium State:
All modes have same effective temperature equal to bath temperature.
Non-Equilibrium State:
Different modes have different effective temperatures:
High-frequency modes may be “hotter” (excess energy)
Low-frequency modes may be “colder” (energy deficit)
Mode-Selective Effects¶
In cavity-coupled systems:
On-resonance mode (\(\omega \approx \omega_{\text{cavity}}\)): Often shows \(T_{\text{eff}} > T_{\text{bath}}\)
Off-resonance modes: Closer to \(T_{\text{bath}}\)
Physical mechanism:
Cavity coupling preferentially excites resonant vibrational modes, creating non-thermal energy distribution.
Diagnostic Tool¶
FDR as diagnostic:
Equilibration check: \(T_{\text{eff}} \approx T_{\text{bath}}\) indicates equilibrium
Strong coupling effects: Large \(|T_{\text{eff}} - T_{\text{bath}}|\) indicates strong non-equilibrium
Mode selectivity: Frequency-dependent \(T_{\text{eff}}(\omega)\) shows which modes are affected
Best Practices¶
Measurement Guidelines¶
1. Sufficient statistics:
# Long equilibrium phase for good statistics
fdr = FDRIntegration(
...,
equilibrium_duration_ps=200.0, # At least 100-200 ps
window_size_ps=50.0 # Multiple correlation times
)
2. Appropriate perturbation:
# Small perturbation (linear response regime)
fdr = FDRIntegration(
...,
perturbation_amplitude=0.01 # 1% of characteristic field
)
3. Frequency resolution:
# Match to system dynamics
fdr = FDRIntegration(
...,
probe_frequency_cm=2000.0, # Near important resonances
frequency_resolution=10.0 # Sufficient resolution
)
Analysis Recommendations¶
Window size selection:
Too small: Poor statistics, noisy \(T_{\text{eff}}\)
Too large: Poor time resolution, misses dynamics
Recommended: 5-10 correlation times
Update frequency:
Balance between time resolution and computational cost
Recommended: update_interval_ps = 0.1-1.0 ps
Perturbation strength:
Must be small (linear response)
But large enough for good signal-to-noise
Recommended: 0.5-2% of characteristic energy scale
Troubleshooting¶
Common Issues¶
1. Noisy T_eff measurements:
Causes: Insufficient statistics, too short windows
Solutions: - Increase window_size_ps - Increase equilibrium_duration_ps - Average over multiple realizations
2. T_eff far from expected:
Causes: System not equilibrated, perturbation too large
Solutions: - Longer equilibration before measurement - Reduce perturbation_amplitude - Check for systematic drifts
3. Negative T_eff:
Causes: Numerical issues, population inversion
Solutions: - Check calculation of \(\chi''\) (must be positive) - Verify FFT settings - May indicate true population inversion (physical)
Validation¶
Check against known cases:
# Test 1: Equilibrium system should give T_eff = T_bath
# Run without cavity coupling
cavity_force.couplstr = 0.0
fdr_result = fdr.analyze(...)
assert abs(fdr_result['T_eff'] - T_bath) < 5.0 # Within 5K
# Test 2: FDT should hold at equilibrium
fdr_ratio = fdr_result['S_AA'] / (2 * k_B * T_bath * fdr_result['chi_imag'] / omega)
assert abs(fdr_ratio - 1.0) < 0.1 # Within 10%
Theoretical Background¶
Fluctuation-Dissipation Theorem¶
Classical FDT (equilibrium):
Generalized FDR (non-equilibrium):
where \(T_{\text{eff}}(\omega)\) quantifies FDT violation.
Kubo Formula¶
Linear response:
Imaginary part gives dissipation.
Cavity QED Context¶
In cavity-molecule systems:
Polariton formation: New eigenstates with modified dynamics
Energy redistribution: Non-thermal energy flow between modes
Collective effects: N-molecule enhancement of coupling
FDR measurements reveal these non-equilibrium dynamics.
References¶
Key Papers:
Cugliandolo, L. F. “The effective temperature.” J. Phys. A: Math. Theor. 44, 483001 (2011).
Ciliberto, S., et al. “Experimental test of the fluctuation-dissipation theorem in a nonequilibrium steady state.” Physica A 340, 240 (2004).
Herrera, F. & Spano, F. C. “Cavity-controlled chemistry in molecular ensembles.” Phys. Rev. Lett. 116, 238301 (2016).
Next Steps¶
Molecular Temperatures for molecular temperature decomposition
Controllers for temperature control strategies
Analysis Tools for analysis framework
Strong Coupling for strong coupling physics