← Octo-TIGER / All test problemsThin transport

Streaming wave

A smooth, periodic radiation wave travels at the speed of light. Its phase and amplitude test transport accuracy.

The experiment

Physical setup

The initial radiation field is a sinusoidal wave in a periodic cube of side length L. All photons stream in one fixed direction n, so the physical flux is F = cEn and the M1 pressure is P = Enn. There is no thermal emission or absorption. New paired runs use explicit positive scattering opacity with χL = 10−4, giving weak flux damping. Legacy zero-opacity runs retain their recorded opacity.

For an integer mode vector m, define n = m/|m|. The reviewed profile uses m = (2, −3, 1), a mean energy density of 1 and a sinusoidal amplitude of 0.5. Integer components make the phase periodic on each Cartesian face. These profile constants are defined in the solver source; the generic background/amplitude configuration entries do not set them.

The standard runner uses a uniform cubic grid with hydrodynamics and gravity disabled. Its CGS box spans −3 × 10¹⁰ to +3 × 10¹⁰ cm on each axis, with c = 2.99792458 × 10¹⁰ cm/s and default final time 4 s. Opt-in adaptive runs are identified below; N = INX × 2level then describes their configured finest equivalent resolution. Each completed run below lists its recorded parameters.

The comparison

Comparison and interpretation

This reference is exact for zero-opacity nonlinear M1 and is a free-streaming-limit reference for the positive-opacity numerical runs. Constant-direction transport reduces to scalar advection:

∂tE + c n · ∇E = 0

At a cell center x, the reference is the exact volume average of the translated sinusoid, including its attenuation from averaging over a finite cell:

Ē(x, t) = 1 + ½ [∏d=x,y,z sinc(π md Δx / L)] cos[2π (m · x − c |m| t) / L]
F̄ = c Ē m / |m|

Here sinc(a) = sin(a)/a, with sinc(0) = 1. The same expression initializes the cells and supplies the comparison at the recorded final time. The phase uses the integer vector; only the flux direction is normalized.

What this test measures

Look for phase error, loss of amplitude, directional bias, and the resolution dependence of all four field norms. Smooth transport can expose the nominal accuracy of the scheme, although limiting near extrema and time integration affect the measured order. Periodic boundaries conserve radiation energy. Scattering changes integrated flux; its recorded source ledger accounts for the impulse into the fixed material. A small conservation residual does not by itself establish that the wave shape is accurate.

Measured results

All resolutions

LevelGridBatch status
364³Ready

Convergence requires at least two completed, comparable resolutions.

Full-volume norms and orders

GridFieldNormErrorOrderError units
64³ cellserL11.472983e-02—erg/cm³
64³ cellserL21.723791e-02—erg/cm³
64³ cellserLinf3.295016e-02—erg/cm³
64³ cellsfxL12.360363e+08—erg/(cm² s)
64³ cellsfxL22.762363e+08—erg/(cm² s)
64³ cellsfxLinf5.282461e+08—erg/(cm² s)
64³ cellsfyL13.540555e+08—erg/(cm² s)
64³ cellsfyL24.143556e+08—erg/(cm² s)
64³ cellsfyLinf7.923713e+08—erg/(cm² s)
64³ cellsfzL11.180180e+08—erg/(cm² s)
64³ cellsfzL21.381180e+08—erg/(cm² s)
64³ cellsfzLinf2.641227e+08—erg/(cm² s)

64³ cells / level 3

Recorded setup and run provenance
OriginOcto-TIGER application
DomainCube of side 6.000000e+10 cm; centered at the origin
Resolution64³ cells; finest Δx = 9.375000e+08 cm
Final comparison time2.000000e-01 s
Radiation modelM1
Radiation integrationM1 RK1 (first order in time)
Flux semanticsEvolved M1 flux moment
Radiation backendcpu
Physical light speed2.997925e+10 cm/s
Reduced-speed factor α1.000000e+00
Radiation transport speed2.997925e+10 cm/s
Periodic boundarieson
Hydrodynamicsoff
Gravityoff
Implicit radiation sourceon
Uniform gridon
CFL0.4
Timestep cap0.00033333333333333338 s
Output interval0.0016666666666666668 s
{
  "background": 1.0,
  "c": 29979245800.0,
  "case": "streaming_wave",
  "cells": 64,
  "command": [
    "/ddnB/work/dmarce1/octotiger-m1-fld-20261014/campaign/control/launch-solver",
    "/ddnB/work/dmarce1/octotiger-m1-fld-20261014/build/octotiger",
    "--config_file=/ddnB/work/dmarce1/octotiger-m1-fld-20261014/campaign/runs/l3-streaming_wave-m1/streaming_wave/l3/run.ini",
    "--hpx:threads=64"
  ],
  "comparison_signature": {
    "atomic_mass": "1",
    "atomic_number": "1",
    "cfl": "0.4",
    "code_to_cm": "1",
    "code_to_g": "1",
    "code_to_s": "1",
    "disable_analytic": "off",
    "disable_diagnostics": "on",
    "eos": "IDEAL",
    "gravity": "off",
    "hard_dt": "0.00033333333333333338",
    "hydro": "off",
    "hydro_device_kernel_type": "OFF",
    "hydro_host_kernel_type": "LEGACY",
    "monopole_device_kernel_type": "OFF",
    "multipole_device_kernel_type": "OFF",
    "n_species": "1",
    "omega": "0",
    "periodic": "on",
    "problem": "RADIATION_STREAMING_WAVE",
    "rad_implicit": "on",
    "rad_test_amplitude": "0.01",
    "rad_test_background": "1",
    "rad_test_chi": "1.6666666666666668e-15",
    "rad_test_luminosity": "2.6981321220000001e+29",
    "rad_test_width": "6000000000",
    "radiation": "on",
    "radiation_algorithm_version": 1,
    "radiation_integrator": "euler",
    "radiation_model": "m1",
    "radiation_reduced_c_factor": "1",
    "stop_step": "100000",
    "stop_time": "0.20000000000000001",
    "unigrid": "on",
    "xscale": "30000000000"
  },
  "config": {
    "atomic_mass": "1",
    "atomic_number": "1",
    "cfl": "0.4",
    "code_to_cm": "1",
    "code_to_g": "1",
    "code_to_s": "1",
    "datadir": "/ddnB/work/dmarce1/octotiger-m1-fld-20261014/campaign/runs/l3-streaming_wave-m1/streaming_wave/l3/",
    "disable_analytic": "off",
    "disable_diagnostics": "on",
    "disable_output": "off",
    "eos": "IDEAL",
    "gravity": "off",
    "hard_dt": "0.00033333333333333338",
    "hydro": "off",
    "hydro_device_kernel_type": "OFF",
    "hydro_host_kernel_type": "LEGACY",
    "max_level": "3",
    "min_level": "3",
    "monopole_device_kernel_type": "OFF",
    "multipole_device_kernel_type": "OFF",
    "n_species": "1",
    "odt": "0.0016666666666666668",
    "omega": "0",
    "periodic": "on",
    "problem": "RADIATION_STREAMING_WAVE",
    "rad_implicit": "on",
    "rad_test_amplitude": "0.01",
    "rad_test_background": "1",
    "rad_test_chi": "1.6666666666666668e-15",
    "rad_test_luminosity": "2.6981321220000001e+29",
    "rad_test_width": "6000000000",
    "radiation": "on",
    "radiation_backend": "cpu",
    "radiation_integrator": "euler",
    "radiation_model": "m1",
    "radiation_reduced_c_factor": "1",
    "stop_step": "100000",
    "stop_time": "0.20000000000000001",
    "unigrid": "on",
    "xscale": "30000000000"
  },
  "conservation": [
    {
      "boundary": 0.0,
      "boundary_fraction": 0.0,
      "field": "er",
      "final": 2.16e+32,
      "final_fraction": 1.0,
      "history_end_time": 0.2,
      "history_scope": "full_run",
      "history_start_time": 0.0,
      "initial": 2.16e+32,
      "initial_fraction": 1.0,
      "integral_units": "erg",
      "max_abs_residual": 3.602879701896397e+16,
      "max_normalized_error": 1.6679998619890727e-16,
      "normalization_basis": "abs(initial_energy)",
      "normalization_scale": 2.16e+32,
      "normalization_time": 0.0,
      "normalized_error": 0.0,
      "normalized_residual": 0.0,
      "raw_change": 0.0,
      "residual": 0.0,
      "source": 0.0,
      "source_fraction": 0.0,
      "zero_initial_flux_relative_tolerance": 1.4210854715202004e-14
    },
    {
      "boundary": 0.0,
      "boundary_fraction": 0.0,
      "field": "fx",
      "final": 3.461274891517385e+42,
      "final_fraction": 0.999990006968019,
      "history_end_time": 0.2,
      "history_scope": "full_run",
      "history_start_time": 0.0,
      "initial": 3.4613094804937195e+42,
      "initial_fraction": 1.0,
      "integral_units": "erg cm/s",
      "max_abs_residual": 6.672748112480586e+26,
      "max_normalized_error": 1.927810312855581e-16,
      "normalization_basis": "abs(initial_component)",
      "normalization_scale": 3.4613094804937195e+42,
      "normalization_time": 0.0,
      "normalized_error": 1.8696770874130174e-17,
      "normalized_residual": 1.8696770874130174e-17,
      "raw_change": -3.458897633478786e+37,
      "residual": 6.471531028124562e+25,
      "source": -3.4588976334852575e+37,
      "source_fraction": -9.993031981040545e-06,
      "zero_initial_flux_relative_tolerance": 1.4210854715202004e-14
    },
    {
      "boundary": 0.0,
      "boundary_fraction": 0.0,
      "field": "fy",
      "final": -5.1919123372760774e+42,
      "final_fraction": -0.9999900069680189,
      "history_end_time": 0.2,
      "history_scope": "full_run",
      "history_start_time": 0.0,
      "initial": -5.19196422074058e+42,
      "initial_fraction": -1.0,
      "integral_units": "erg cm/s",
      "max_abs_residual": 1.2269841490451227e+27,
      "max_normalized_error": 2.363236911655963e-16,
      "normalization_basis": "abs(initial_component)",
      "normalization_scale": 5.19196422074058e+42,
      "normalization_time": 0.0,
      "normalized_error": 6.911874938056528e-17,
      "normalized_residual": 6.911874938056528e-17,
      "raw_change": 5.1883464502491275e+37,
      "residual": 3.588620737662301e+26,
      "source": 5.188346450213241e+37,
      "source_fraction": 9.993031981012337e-06,
      "zero_initial_flux_relative_tolerance": 1.4210854715202004e-14
    },
    {
      "boundary": 0.0,
      "boundary_fraction": 0.0,
      "field": "fz",
      "final": 1.7306374457586924e+42,
      "final_fraction": 0.999990006968019,
      "history_end_time": 0.2,
      "history_scope": "full_run",
      "history_start_time": 0.0,
      "initial": 1.7306547402468598e+42,
      "initial_fraction": 1.0,
      "integral_units": "erg cm/s",
      "max_abs_residual": 5.723083164254552e+26,
      "max_normalized_error": 3.3068890236525246e-16,
      "normalization_basis": "abs(initial_component)",
      "normalization_scale": 1.7306547402468598e+42,
      "normalization_time": 0.0,
      "normalized_error": 2.1118455659709644e-16,
      "normalized_residual": 2.1118455659709644e-16,
      "raw_change": -1.729448816739393e+37,
      "residual": 3.654875539416962e+26,
      "source": -1.7294488167759418e+37,
      "source_fraction": -9.993031981233033e-06,
      "zero_initial_flux_relative_tolerance": 1.4210854715202004e-14
    }
  ],
  "dx": 937500000.0,
  "executable_sha256": "ca38f12e338eed0b7074dbb15c70c089a8d31d1c12aa87f5b044c42824721f0b",
  "inx": 8,
  "length": 60000000000.0,
  "level": 3,
  "movie_capture": {
    "hard_dt": 0.0003333333333333334,
    "odt": 0.0016666666666666668,
    "requested_snapshots": 121,
    "steps_per_output_check": 1
  },
  "norms": {
    "er": {
      "L1": 0.01472983,
      "L2": 0.01723791,
      "Linf": 0.03295016
    },
    "fx": {
      "L1": 236036300.0,
      "L2": 276236300.0,
      "Linf": 528246100.0
    },
    "fy": {
      "L1": 354055500.0,
      "L2": 414355600.0,
      "Linf": 792371300.0
    },
    "fz": {
      "L1": 118018000.0,
      "L2": 138118000.0,
      "Linf": 264122700.0
    }
  },
  "origin": "Octo-TIGER application",
  "physical_c": 29979245800.0,
  "radiation_algorithm_version": 1,
  "radiation_backend": "cpu",
  "radiation_equations": "physical-c",
  "radiation_flux_semantics": "evolved_m1_flux",
  "radiation_integrator": "euler",
  "radiation_model": "m1",
  "radiation_reduced_c_factor": 1.0,
  "reference_exact_for_solver": false,
  "reference_kind": "free-streaming-limit",
  "reference_model": "zero-opacity-m1-advection",
  "reference_sampling": "cell averages",
  "status": "complete",
  "streaming_opacity": 1.6666666666666668e-15,
  "streaming_optical_depth": 0.0001,
  "time": 0.2,
  "transport_c": 29979245800.0,
  "units": {
    "chi": "1/cm",
    "energy_density": "erg/cm^3",
    "flux": "erg/(cm^2 s)",
    "length": "cm",
    "luminosity": "erg/s",
    "mass": "g",
    "source": "erg/(cm^3 s)",
    "system": "CGS",
    "time": "s"
  },
  "validation_scope": "Explicit positive scattering opacity. The zero-opacity M1 advection profile is a free-streaming-limit reference, not an exact solution at finite opacity."
}

Final fields and profiles

Central cell layer at z=dx/2; ray at y=z=dx/2.

Numerical, reference, and signed-error energy slices. Central cell layer at z=dx/2; ray at y=z=dx/2.
Numerical, reference, and signed-error energy slices. Central cell layer at z=dx/2; ray at y=z=dx/2. · PDF
Numerical/reference line profiles and signed errors for all four radiation fields
Numerical/reference line profiles and signed errors for all four radiation fields · PDF
All three flux maps
fx: numerical, reference, and signed-error slice
fx: numerical, reference, and signed-error slice · PDF
fy: numerical, reference, and signed-error slice
fy: numerical, reference, and signed-error slice · PDF
fz: numerical, reference, and signed-error slice
fz: numerical, reference, and signed-error slice · PDF

Saved-state movie

Streaming Wave · L3 · M1 RK1

121 stored states; 121 shown. Physical time: 0–0.2 s. Playback: 60 s.

Zero-order hold; no solution interpolation. Playback holds each saved numerical state over its time interval and includes endpoint holds.

All 121 snapshot times

Snapshot times: 0, 0.00166666667, 0.00333333333, 0.005, 0.007, 0.00866666667, 0.0103333333, 0.012, 0.0136666667, 0.0153333333, 0.017, 0.0183333333, 0.02, 0.0216666667, 0.0233333333, 0.025, 0.0266666667, 0.0283333333, 0.03, 0.0316666667, 0.0333333333, 0.035, 0.0366666667, 0.0383333333, 0.04, 0.0416666667, 0.0436666667, 0.0453333333, 0.047, 0.0486666667, 0.0503333333, 0.052, 0.0536666667, 0.0553333333, 0.057, 0.0586666667, 0.0603333333, 0.062, 0.0636666667, 0.0653333333, 0.067, 0.0686666667, 0.0703333333, 0.0716666667, 0.0733333333, 0.075, 0.0766666667, 0.0783333333, 0.08, 0.0816666667, 0.0833333333, 0.085, 0.0866666667, 0.0883333333, 0.09, 0.0916666667, 0.0933333333, 0.095, 0.0966666667, 0.0983333333, 0.1, 0.101666667, 0.103333333, 0.105, 0.106666667, 0.108333333, 0.11, 0.111666667, 0.113333333, 0.115, 0.116666667, 0.118333333, 0.12, 0.121666667, 0.123333333, 0.125, 0.126666667, 0.128333333, 0.13, 0.131666667, 0.133333333, 0.135, 0.136666667, 0.138333333, 0.14, 0.141666667, 0.143333333, 0.145, 0.146666667, 0.148333333, 0.15, 0.151666667, 0.153333333, 0.155333333, 0.157, 0.158666667, 0.160333333, 0.162, 0.163666667, 0.165333333, 0.167, 0.168666667, 0.170333333, 0.172, 0.173666667, 0.175333333, 0.177, 0.178666667, 0.180333333, 0.182, 0.183666667, 0.185333333, 0.187, 0.188666667, 0.190333333, 0.192, 0.193666667, 0.195333333, 0.197, 0.198666667, 0.2 s.

Arrows show the independently evolved M1 radiation flux. Arrows have equal length and show direction only.

Movies show numerical states at explicit positive opacity. Final profiles use the zero-opacity analytic solution only as a free-streaming-limit reference.

Central z=0+ radiation energy slice with faint cell mesh and equal-length flux direction arrows. Arrows show the independently evolved M1 radiation flux. Fixed color limits; actual stored Silo times held without solution interpolation. Movies show numerical states at explicit positive opacity. Final profiles use the zero-opacity analytic solution only as a free-streaming-limit reference. The maps show the full simulation domain without cropping.

Download MP4 · Rendering and timing metadata · Full run report

All campaign movies

Conservation

All values below are dimensionless fractions of the fixed normalization scale at t_ref = 0 s.

FieldScaleQ(t_ref)/scaleQ(t)/scaleBoundary B/scaleSource S/scaleResidual R/scaleMaximum |R|/scale
er|Q(t_ref)|1.000000e+001.000000e+000.000000e+000.000000e+000.000000e+001.668000e-16
fx|Q(t_ref)|1.000000e+009.999900e-010.000000e+00-9.993032e-061.869677e-171.927810e-16
fy|Q(t_ref)|-1.000000e+00-9.999900e-010.000000e+009.993032e-066.911875e-172.363237e-16
fz|Q(t_ref)|1.000000e+009.999900e-010.000000e+00-9.993032e-062.111846e-163.306889e-16
Integrated radiation budgets and their transport/source-corrected residuals
Integrated radiation budgets and their transport/source-corrected residuals · PDF

Data and reproducibility

Momentum plots are omitted for this fixed-material problem. The prescribed medium acts as an external momentum reservoir, so radiation momentum exchange does not imply that a compensating gas momentum was evolved.

Reading the results

Errors, budgets, and movies

Every norm uses the full three-dimensional domain, with cell-volume weighting. Here e = numerical − reference and V is the domain volume:

L1 = Σ |e| ΔV / V,   L2 = √(Σ e² ΔV / V),   L∞ = max |e|
p = ln(errorcoarse / errorfine) / ln(Δxcoarse / Δxfine)

Orders require two completed runs with matching physical time, configuration, units, executable, and origin. An exact zero error has no logarithmic order. The central slice and line profiles are visual diagnostics: the report slice is the cell layer at z = Δx/2, and its line profile is at y = z = Δx/2.

Conservation is assessed using the measured domain integrals and the signed cumulative boundary and source budgets:

A labeled checkpoint continuation uses its checkpoint as t_ref, with counters and fixed normalization starting there. Its reported residuals cover that resumed segment only; original histories remain separate.

R(t) = Q(t) − Q(0) + B(t) − S(t)

B is outward transport and S is the source change. Conservation plots and this page's budget tables show fractions of the initial totals: Q(t)/D, [Q(0) − B(t) + S(t)]/D, and the signed residual R(t)/D. The denominator D = |Q(0)| is fixed for the entire history. It never grows with the current total or accumulated transport/source budgets. A negative initial flux therefore starts at −1, and the plotted fraction retains its sign.

A component whose initial net flux is zero or negligible cannot be divided by its own initial total. It instead uses the fixed scale D = c |E₀|, where E₀ is the initial integrated radiation energy. This fallback is labeled on its panels and in the table. “Negligible” means |Q(0)|/(c |E₀|) ≤ 64ε ≈ 1.421085 × 10−14, with ε the double-precision machine epsilon. This prevents roundoff left by cancellation in a symmetric field from becoming the denominator. For the initially cold Marshak case, the prescribed bath sets D = Ebath V for energy and D = c Ebath V for flux, with Ebath = 4/c. These scales remain fixed even though radiation enters the initially empty domain.

Raw histories and dimensional summary columns remain in physical units: energy integrals in erg, physical-flux integrals in erg cm/s for CGS runs. Dividing a flux integral by c² gives radiation momentum. Fraction-history CSV files are dimensionless except for their time column; summary files record each denominator and its basis. Maximum fractional residuals use the same fixed denominator as the final residual.

For runs labeled RSLA, these budgets check the modified radiation equations. They do not establish conservation of physical gas-plus-radiation energy. With reduced-speed factor α, the closed-system coupled invariants are Egas + Er/α and gas momentum + F/(αc²), with physical c in the closure. Compare multiple α values before interpreting an RSLA result as an approximation to physical-c evolution.

Movies show the numerical Silo states with a fixed color range for each movie. Recorded states are held for their actual simulation-time gaps; intermediate solutions are not interpolated. The 3D option shows the domain's exterior surface. Movies and plots retain their recorded physical units.

Sources & provenance

Where this problem comes from

The benchmark is the suite's analytic periodic-advection construction, implemented by streamingWave in octotiger/test_problems/radiation/profiles.hpp. Its formula follows directly from the free-streaming M1 closure. No specific published test was identified as the source of this exact mode and amplitude.

Radiation method context

M1 RK1 evolves radiation energy and flux moments with the retained first-order radiation update. FLD uses backward-Euler radiation diffusion/material exchange with the Levermore–Pomraning limiter. Moving cases add first-order conservative gas transport and radiation force/work; their reconstructed lab-frame flux includes (E I+P) v as well as −D∇E. The scalar implicit transport solve uses composite-grid multigrid and an iterative linear solver. Both time integrators are first order.

The suite includes Gaussian scattering, Marshak heating, a Gaussian emitter, explicit thin positive-opacity wave/front comparisons, and moving-gas shock/blast problems on CPU at physical light speed. A configured case does not establish that a solve converged; only validated completed runs appear as results. Flux diagnostics in FLD have no separate M1 momentum conservation test. A difference between paired M1 and FLD solutions is a model comparison, not an analytic error. ADER2 has been removed from the current solver; historical result files retain their original provenance.

Skinner & Ostriker (2013) and Hanawa & Audit (2014) provide context for the M1 equations. The implementation and saved executable/source hashes identify the actual numerical methods used in this batch.

Reproducing this batch

Descriptions document the reviewed source implementation. Older or edited solver versions can use different profile constants or averaging rules; these are not all encoded in run.ini. Use the run metadata, executable hash, and saved batch source hashes to identify the implementation behind a result. A source path or descriptive formula alone is not proof of the executable's contents.