- Stable research sandbox; actively maintained
- New: gravitational-coupling plugin (EM stress–energy → h(t), P_GW)
- YAML/JSON experiments with automated sweeps
- Heisenberg–Euler vacuum birefringence and photon–photon scattering (O(1) estimates)
- Schwinger pair production (order-of-magnitude)
- Linearized GR coupling: EM stress–energy → quadrupole → h(t), P_GW
- Detector models and κ-constraint “discovery engine” sweeps
See also: docs/PROVENANCE.md for reference provenance and how to add new sources.
Simulate ultra-intense light interacting with quantum vacuum structure and spacetime:
- Vacuum birefringence via Heisenberg–Euler effective Lagrangian
- Photon–photon scattering cross sections (order-of-magnitude)
- Schwinger pair production rates near the critical field
- Linearized gravitational coupling: EM stress–energy → metric perturbations
- Gravitational wave estimates: far-field strain and radiated power
This is a sandbox for "intense EM fields meet spacetime" exploration. It targets near-term, testable regimes (QED nonlinearities, vacuum polarization control) and provides a path-finder for field–spacetime interaction physics.
git clone https://github.com/arcticoder/extreme-field-qed-simulator.git
cd extreme-field-qed-simulator
python -m venv .venv && source .venv/bin/activate
pip install -e .
# Minimal gravitational-coupling sanity run (tiny h_rms output)
python scripts/simulate_gravity_coupling.py --config examples/configs/interfering_pulses.json
# Expected: a small RMS strain (e.g., h_rms ~ 1e-58 to 1e-60) printed to stdout
# Optional: quick birefringence and pair-production demos
python scripts/simulate_birefringence.py --E0 1e15 --L 1.0 --lambda0 532e-9 --theta 45 --cavity-gain 1e6
python scripts/simulate_pair_production.py --E0 1e16 --volume 1e-12 --duration 1e-12
# Sweeps (save to results/sweeps/ folder)
python scripts/run_sweep.py --sweep-config examples/configs/sweep_gaussian_beam.json --output results/sweeps/gaussian_sweep.json- Heisenberg–Euler Δn for orthogonal polarizations with arbitrary E and B
- Phase retardation and induced ellipticity for a probe beam
- Simple Schwinger-rate pair production estimator (warning: exponentially suppressed unless E ~ E_S)
The efqs.gravitational_coupling module provides validated functions for GW emission calculations:
quadrupole_moment(positions, energy_elements_J)— Compute Q_ij from energy distributionstrain_far_field(Q_t, dt, R, use_tt=True, line_of_sight=None)— Far-field strain with TT projectionradiated_power_from_quadrupole(Q_t, dt)— Instantaneous power P(t) via quadrupole formuladominant_frequency(series, dt, component=None)— FFT peak extraction with bandwidthstress_energy_from_fields(E, B, include_qed=False)— EM energy density T^{00}
TT projection details:
- Default line-of-sight:
[0, 0, 1](z-axis observer) - Custom directions: Pass normalized 3-vector
line_of_sight=[nx, ny, nz](auto-normalized if needed) - Projection identities: Traceless (Tr(h)=0), transverse (h·n=0), symmetric (h=h^T)
- Unit tests validate all projection properties (see
tests/test_tt_projection.py)
- EM stress–energy tensor from E, B fields (with optional QED corrections)
- Quadrupole moment calculation from energy distributions (supports grid-based and point-source interfaces)
- Far-field gravitational strain with configurable TT projection
- Line-of-sight selector: Specify observer direction for TT projection (default: z-axis)
- Transverse-traceless gauge automatically enforced when
use_tt=True
- Radiated GW power via quadrupole formula (returns time series P(t) or time-averaged value)
- Frequency diagnostics: Dominant frequency extraction, peak amplitude, and -3 dB bandwidth via FFT analysis
- Optional pair-production energy-loss channel in time evolution (uniform drain approximation)
- Multiple source models:
- Interfering laser pulses (standing waves)
- Rotating quadrupole hotspots
- Focused Gaussian beams
- Rotating capacitor (Biefeld-Brown-like geometry)
- Installable package (
pip install -e .) - JSON/YAML configuration support
- Automated parameter sweeps
- Reusable plotting utilities
- All tests passing (5/5)
The gravity coupling scripts compute:
- Strain metrics: RMS strain, maximum strain, time series h_ij(t) with optional TT projection
- Power metrics: Average and peak GW power, instantaneous power time series P(t)
- Efficiency: P_GW/P_in ratio, h_rms per Joule of input energy
- Frequency spectrum: Dominant frequency (Hz), peak amplitude, -3 dB bandwidth via FFT analysis
This repository supports two configuration formats:
- JSON configs (in
examples/configs/): Simple format for standalone scripts likesimulate_gravity_coupling.pyandrun_sweep.py. These directly specify parameters and support"output_json"field for saving results. - YAML configs (in
configs/): Advanced format forrun_experiments.pywith multi-sweep support, detector models, and anomalous coupling ansätze. Use--config configs/sweeps.yaml --sweep <sweep_name>syntax. Outputs to HDF5 by default.
Quick reference:
# JSON-based single run (saves to JSON if specified)
python scripts/simulate_gravity_coupling.py --config examples/configs/interfering_pulses.json
# JSON-based parameter sweep (saves to JSON)
python scripts/run_sweep.py --sweep-config examples/configs/sweep_gaussian_beam.json --output results.json
# YAML-based experiment pipeline (saves to HDF5)
python scripts/run_experiments.py --config configs/sweeps.yaml --sweep sweep_E0_colliding_pulsesOptional physics toggles (JSON configs):
"include_pair_losses": true— Enable pair-production energy drain (Schwinger rate)"birefringence_feedback": true— First-order Δn modulation of local energy density"use_tt_projection": true— Apply transverse-traceless projection to strain
For weak gravitational fields, the metric perturbation h_μν satisfies:
where T_μν is computed from EM fields. In the far-field (radiation zone), the strain is:
with proper TT projection for a given line of sight.
The radiated gravitational wave power is:
Heisenberg–Euler energy density correction (leading order):
where F and G are the electromagnetic field invariants.
Typical run with interfering pulses at E₀ = 10¹⁵ V/m:
- RMS strain: h ~ 10⁻²² (dimensionless) at R = 10 m
- Average P_GW: ~ 10²³ W (toy configuration; not physical lab setup)
These are path-finder estimates for comparing geometries and configurations, not precision predictions.
These models are leading-order, homogeneous-field approximations. Real experiments involve spatiotemporal structure, dispersion, damage thresholds, and noise.
This framework has evolved into a discovery engine for constraining new physics via null results. Instead of just computing predictions, it systematically derives coupling strength constraints (κ-bounds) when experiments see no signal.
-
κ-Parameterized Ansätze (7 physics-motivated models):
axion_like: E·B parity-odd coupling (compare to CAST/ADMX)dilaton_like: T^μ_μ scalar-tensor gravitychern_simons_like: A·B Lorentz violation (SME framework)field_invariant_F2,vector_potential_squared,photon_number,spatial_gradient
-
Real Detector Models with frequency-dependent sensitivity:
- LIGO O1, aLIGO design, LISA, Einstein Telescope
- Quantum sensors (aspirational h~10⁻³⁰)
- Matched-filter SNR:
SNR² = 4∫|h̃(f)|²/S_n(f) df
-
Automated Parameter Sweeps:
python scripts/run_experiments.py --config configs/sweeps.yaml --sweep sweep_E0_colliding_pulses
- Outputs consolidated CSV with κ-constraints per ansatz–detector pair
- Auto-generated 4-panel plots: h_rms, P_avg, κ_required, peak_freq vs. swept parameter
- Sweep E₀, waist, Q-factor, grid resolution, etc.
-
Publication-Ready Constraint Derivation:
- For each (source config, detector, ansatz): compute κ_required for 5σ detection
- Null result → publish: "κ < κ_required at 95% CL"
- Discovery reach curves: show parameter space where future experiments can probe
# Run a 3-point validation sweep (E₀ = 5×10¹³, 1×10¹⁴, 2×10¹⁴ V/m)
python scripts/run_experiments.py --config configs/test_mini_sweep.yaml --sweep test_mini_sweep
# Output:
# - results/sweeps/test_mini/test_mini_sweep_summary.csv (κ-constraints)
# - results/sweeps/test_mini/test_mini_sweep_plots.png (auto-plots)
# Production sweeps (7-point E₀, 6-point waist, 5-point cavity-Q)
python scripts/run_experiments.py --config configs/sweeps.yaml --sweep sweep_E0_colliding_pulses
python scripts/run_experiments.py --config configs/sweeps.yaml --sweep sweep_waist_colliding_pulses
python scripts/run_experiments.py --config configs/sweeps.yaml --sweep sweep_Q_cavity- Strain vs. Field:
h ∝ E₀²(quadrupole moment ∝ stress-energy ∝ E²) - Power vs. Field:
P_GW ∝ E₀⁴(time derivative of quadrupole) - κ-Constraint:
κ_required ∝ 1/E₀²(higher field → stronger constraint)
Example from test_mini_sweep:
E₀ = 5×10¹³ V/m → h_rms = 3.7×10⁻⁵⁹, κ_LIGO = 2.3×10³³
E₀ = 2×10¹⁴ V/m → h_rms = 5.9×10⁻⁵⁸, κ_LIGO = 8.9×10³⁰ (16× improvement)
Q: My κ_required is 10⁵⁰. Is the code broken?
A: No! This means the anomalous coupling would need to be enormous to produce a detectable signal with current experiments. This is useful science:
- Confirms known physics (EM + GR) predicts negligible signal
- Sets an upper bound: null result → κ < 10⁵⁰
- Guides theory: if your model predicts κ ~ 10⁴⁵, experiment is relevant; if κ ~ 10²⁰, need different approach
Q: How do I compare ansätze?
A: Don't compare κ-values across ansätze (different units, different physics). Instead:
- Compare κ-constraints within same ansatz across different experiments
- Map κ to theory-specific couplings (e.g., axion g_aγγ, dilaton VEV, SME coefficients)
- Discovery Engine Guide – Complete methodology, ansätze catalog, sweep design, troubleshooting
- Back-Reaction Assessment Guide – How to interpret metrics and run systematic sweeps to assess EM ↔ spacetime viability
- Detector Sensitivity Curves – ASDs for LIGO/LISA/ET/quantum sensors
- Quick Start — minimal run, expected outputs, troubleshooting
- Anomalous Coupling (κ) Modules — parameterization and units
- Discovery Engine Guide – Complete guide to κ-constraint methodology, parameter sweeps, ansätze catalog, and publication workflow
- Back-Reaction Assessment Guide – How to interpret metrics and run systematic sweeps to assess EM ↔ spacetime viability
- Provenance Guide — how references are organized and how to add new ones
MIT