← Octo-TIGER / All test problemsStationary flux-limited diffusion

Gaussian pulse

A periodized Gaussian energy perturbation diffuses in a prescribed stationary scattering medium. Flux is derived from the energy gradient.

FLD method scope. Stationary grey radiation at physical light speed, CPU backend, backward Euler in time, and derived flux with the Levermore–Pomraning limiter. Analytic diffusion-limit references are supplied, but their differences include nonlinear-limiter and boundary-model effects; they are not exact solutions of this nonlinear FLD solver. Paired M1 RK1 and FLD timings use different stability limits and do not establish performance at matched error.

The experiment

Physical setup

The Gaussian energy and fixed material state use the same initial energy cell averages as the M1 case. The prescribed scattering opacity is constant, the boundaries are periodic, and there is no radiation energy source, gas motion, or material heating. M1 starts with zero evolved flux; FLD instead derives its initial flux from the initial energy gradient, so the models do not share an independent flux initial condition.

The saved run settings specify the Gaussian background, amplitude, width, opacity, domain, and actual final time. The Fourier generator stores the initial energy and the analytic linear diffusion evolution, with reference flux derived from that reference energy.

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

Analytic diffusion-limit reference; not an exact solution of nonlinear FLD. The FLD reference solves the periodic constant-coefficient heat equation, rather than the M1 telegraph equation:

∂tE = D₀∇²E,   D₀ = c/(3χ)
δÊ(k,t) = δÊ(k,0) exp(−D₀|k|²t)
F̂ref = −iD₀kδÊ(k,t)

The generator transforms the same periodized Gaussian cell averages used to initialize the simulation and removes the same Nyquist planes. Each retained mode evolves analytically; the constant background is unchanged. Reference flux is the analytic gradient of those modes, including at the initial time. Thus the reference is exact for linear diffusion of the represented, filtered initial energy, up to floating-point evaluation.

The actual solver uses D = cλ(R)/χ, where R = |∇E|/(χE) and λ(R) = (2+R)/(6+3R+R²). Only as R → 0 does λ → 1/3. Reference differences at finite R include this model difference as well as spatial and temporal errors. The reported L1, L2, and maximum differences cover the exported projected slice, not the full three-dimensional volume.

What this test measures

Inspect energy spreading, positivity, the bound |F| ≤ cE, and periodic energy conservation. Compare resolutions and timesteps separately. A paired M1/FLD curve difference includes a difference between physical closures and transient flux relaxation, not only discretization error. Initial spectral filtering also depends on resolution.

Measured results

All resolutions

LevelGridBatch status
08³Ready

Analytic diffusion-limit reference comparison. The reference is exact for its stated linear diffusion equations, not for the nonlinear FLD limiter. Flux remains a derived diagnostic; no separate M1 momentum conservation test applies.

FLD backward Euler · 8³ cells

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

FLD backward Euler with the Levermore-Pomraning limiter; stationary material and physical c = 29979245800 cm/s. Radiation flux is derived from the radiation-energy gradient; it is a diagnostic, not an evolved momentum variable. Analytic references describe the linear diffusion limit and need not solve nonlinear flux-limited diffusion exactly. M1 versus FLD differences compare distinct radiation models and are not analytic-reference errors.

Recorded setup and run provenance
OriginOcto-TIGER application
DomainCube of side 6.000000e+10 cm; centered at the origin
Resolution8³ cells; finest Δx = 7.500000e+09 cm
Final comparison time2.500000e-01 s
Radiation modelFLD
Radiation integrationFLD backward Euler (first order in time)
Flux semanticsDerived FLD flux: F = -D grad E
Analytic referenceperiodic-constant-diffusion; linear diffusion-limit reference, not exact for the nonlinear FLD limiter
Reference norm scopeArea-weighted projected positive-side slice; no full-volume norm or convergence order inferred
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.025000000000000001 s
Output interval0.125 s
Background energy density1 erg/cm³
Scattering coefficient χ1.6666666666666666e-10 cm⁻¹
Gaussian width w6000000000 cm
Pulse amplitude A0.01 erg/cm³
{
  "background": 1.0,
  "c": 29979245800.0,
  "case": "gaussian_pulse",
  "cells": 8,
  "command": [
    "/home/dmarce1/workspace/octotiger/output/m1-fld-local-20261013-go/.campaign/launch-solver",
    "/home/dmarce1/workspace/octotiger/output/m1-fld-local-20261013-go/.campaign/runtime/octotiger",
    "--config_file=/home/dmarce1/workspace/octotiger/output/m1-fld-local-20261013-go/runs/l0/gaussian_pulse/fld/gaussian_pulse/l0/run.ini",
    "--hpx:threads=24"
  ],
  "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": "on",
    "disable_diagnostics": "on",
    "eos": "IDEAL",
    "gravity": "off",
    "hard_dt": "0.025000000000000001",
    "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_GAUSSIAN_PULSE",
    "rad_implicit": "on",
    "rad_test_amplitude": "0.01",
    "rad_test_background": "1",
    "rad_test_chi": "1.6666666666666666e-10",
    "rad_test_luminosity": "2.6981321220000001e+29",
    "rad_test_width": "6000000000",
    "radiation": "on",
    "radiation_algorithm_version": 1,
    "radiation_integrator": "backward_euler",
    "radiation_limiter": "levermore_pomraning",
    "radiation_model": "fld",
    "radiation_reduced_c_factor": "1",
    "stop_step": "100000",
    "stop_time": "0.25",
    "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": "/home/dmarce1/workspace/octotiger/output/m1-fld-local-20261013-go/runs/l0/gaussian_pulse/fld/gaussian_pulse/l0/",
    "disable_analytic": "on",
    "disable_diagnostics": "on",
    "disable_output": "off",
    "eos": "IDEAL",
    "gravity": "off",
    "hard_dt": "0.025000000000000001",
    "hydro": "off",
    "hydro_device_kernel_type": "OFF",
    "hydro_host_kernel_type": "LEGACY",
    "max_level": "0",
    "min_level": "0",
    "monopole_device_kernel_type": "OFF",
    "multipole_device_kernel_type": "OFF",
    "n_species": "1",
    "odt": "0.125",
    "omega": "0",
    "periodic": "on",
    "problem": "RADIATION_GAUSSIAN_PULSE",
    "rad_implicit": "on",
    "rad_reference": "/home/dmarce1/workspace/octotiger/output/m1-fld-local-20261013-go/runs/l0/gaussian_pulse/fld/gaussian_pulse/l0/reference.bin",
    "rad_test_amplitude": "0.01",
    "rad_test_background": "1",
    "rad_test_chi": "1.6666666666666666e-10",
    "rad_test_luminosity": "2.6981321220000001e+29",
    "rad_test_width": "6000000000",
    "radiation": "on",
    "radiation_backend": "cpu",
    "radiation_integrator": "backward_euler",
    "radiation_limiter": "levermore_pomraning",
    "radiation_model": "fld",
    "radiation_reduced_c_factor": "1",
    "stop_step": "100000",
    "stop_time": "0.25",
    "unigrid": "on",
    "xscale": "30000000000"
  },
  "conservation": [
    {
      "boundary": 0.0,
      "boundary_fraction": 0.0,
      "field": "er",
      "final": 2.1601202758847317e+32,
      "final_fraction": 1.0,
      "history_end_time": 0.25,
      "history_scope": "full_run",
      "history_start_time": 0.0,
      "initial": 2.1601202758847317e+32,
      "initial_fraction": 1.0,
      "integral_units": "erg",
      "max_abs_residual": 0.0,
      "max_normalized_error": 0.0,
      "normalization_basis": "abs(initial_energy)",
      "normalization_scale": 2.1601202758847317e+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
    }
  ],
  "dx": 7500000000.0,
  "executable_sha256": "82854f6db866ae424dd0b4608d8c6b9b4828b28e4d5f30f48d358097d19ab303",
  "fld_diagnostics": {
    "accepted_steps": 10,
    "history_end_time": 0.24999999999999997,
    "history_start_time": 0.0,
    "maximum_nonlinear_residual": 2.488512786229625e-11,
    "maximum_step_coupled_conservation_error": 3.747002670520111e+15,
    "radiation_energy_budget": {
      "boundary": 0.0,
      "boundary_fraction": 0.0,
      "field": "er",
      "final": 2.1601202758847317e+32,
      "final_fraction": 1.0,
      "history_end_time": 0.25,
      "history_scope": "full_run",
      "history_start_time": 0.0,
      "initial": 2.1601202758847317e+32,
      "initial_fraction": 1.0,
      "integral_units": "erg",
      "max_abs_residual": 0.0,
      "max_normalized_error": 0.0,
      "normalization_basis": "abs(initial_energy)",
      "normalization_scale": 2.1601202758847317e+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
    },
    "reference_exact_for_solver": false,
    "reference_kind": "linear-diffusion-limit",
    "reference_norm_scope": "projected-positive-side-slice",
    "retries": 0,
    "slice_reference_norms": {
      "er": {
        "L1": 2.3122970273976168e-05,
        "L2": 5.06472522655236e-05,
        "Linf": 0.00018618756762545097
      },
      "fx": {
        "L1": 209239.86066072763,
        "L2": 354243.0529966604,
        "Linf": 878335.8289378304
      },
      "fy": {
        "L1": 209239.86066072775,
        "L2": 354243.0529966605,
        "Linf": 878335.8289378313
      },
      "fz": {
        "L1": 160130.79792448232,
        "L2": 326143.67134694365,
        "Linf": 878335.8289564699
      }
    },
    "steps": [
      {
        "boundary_energy": 0.0,
        "conservation_error": 3.747002670520111e+15,
        "dt": 0.025,
        "linear_iterations": 3,
        "linear_residual": 4.2405007778000885e-11,
        "nonlinear_iterations": 1,
        "nonlinear_residual": 2.488512786229625e-11,
        "retries": 0,
        "substeps": 1,
        "t": 0.0,
        "vcycles": 3
      },
      {
        "boundary_energy": 0.0,
        "conservation_error": 655725512450202.5,
        "dt": 0.025,
        "linear_iterations": 3,
        "linear_residual": 4.535120545016438e-11,
        "nonlinear_iterations": 1,
        "nonlinear_residual": 1.863611877559552e-11,
        "retries": 0,
        "substeps": 1,
        "t": 0.025,
        "vcycles": 3
      },
      {
        "boundary_energy": 0.0,
        "conservation_error": 2.810251995123053e+15,
        "dt": 0.025,
        "linear_iterations": 3,
        "linear_residual": 5.062727687269407e-11,
        "nonlinear_iterations": 1,
        "nonlinear_residual": 1.4021073350425618e-11,
        "retries": 0,
        "substeps": 1,
        "t": 0.05,
        "vcycles": 3
      },
      {
        "boundary_energy": 0.0,
        "conservation_error": 2.4355517737278245e+15,
        "dt": 0.025,
        "linear_iterations": 3,
        "linear_residual": 5.7385308173651216e-11,
        "nonlinear_iterations": 1,
        "nonlinear_residual": 1.0597774451179342e-11,
        "retries": 0,
        "substeps": 1,
        "t": 0.07500000000000001,
        "vcycles": 3
      },
      {
        "boundary_energy": 0.0,
        "conservation_error": -655725464054946.5,
        "dt": 0.025,
        "linear_iterations": 3,
        "linear_residual": 6.404212938034452e-11,
        "nonlinear_iterations": 1,
        "nonlinear_residual": 8.045686118740438e-12,
        "retries": 0,
        "substeps": 1,
        "t": 0.1,
        "vcycles": 3
      },
      {
        "boundary_energy": 0.0,
        "conservation_error": 1.030425698282138e+15,
        "dt": 0.025,
        "linear_iterations": 3,
        "linear_residual": 6.924646107407507e-11,
        "nonlinear_iterations": 1,
        "nonlinear_residual": 6.1366421569979314e-12,
        "retries": 0,
        "substeps": 1,
        "t": 0.125,
        "vcycles": 3
      },
      {
        "boundary_energy": 0.0,
        "conservation_error": -2.529226881303452e+15,
        "dt": 0.025,
        "linear_iterations": 3,
        "linear_residual": 7.247688167971818e-11,
        "nonlinear_iterations": 1,
        "nonlinear_residual": 4.700363270650236e-12,
        "retries": 0,
        "substeps": 1,
        "t": 0.15,
        "vcycles": 3
      },
      {
        "boundary_energy": 0.0,
        "conservation_error": -93675098835320.0,
        "dt": 0.025,
        "linear_iterations": 3,
        "linear_residual": 7.391019761794937e-11,
        "nonlinear_iterations": 1,
        "nonlinear_residual": 3.616767452333666e-12,
        "retries": 0,
        "substeps": 1,
        "t": 0.175,
        "vcycles": 3
      },
      {
        "boundary_energy": 0.0,
        "conservation_error": 187350146569048.0,
        "dt": 0.025,
        "linear_iterations": 3,
        "linear_residual": 7.39989573517223e-11,
        "nonlinear_iterations": 1,
        "nonlinear_residual": 2.794594378445632e-12,
        "retries": 0,
        "substeps": 1,
        "t": 0.19999999999999998,
        "vcycles": 3
      },
      {
        "boundary_energy": 0.0,
        "conservation_error": 3.465977470973064e+15,
        "dt": 0.025,
        "linear_iterations": 3,
        "linear_residual": 7.31821960581184e-11,
        "nonlinear_iterations": 1,
        "nonlinear_residual": 2.168066272278809e-12,
        "retries": 0,
        "substeps": 1,
        "t": 0.22499999999999998,
        "vcycles": 3
      }
    ],
    "substeps": 10
  },
  "inx": 8,
  "length": 60000000000.0,
  "level": 0,
  "movie_capture": {
    "hard_dt": 0.025,
    "odt": 0.125,
    "requested_snapshots": 3,
    "steps_per_output_check": 5
  },
  "origin": "Octo-TIGER application",
  "physical_c": 29979245800.0,
  "radiation_algorithm_version": 1,
  "radiation_backend": "cpu",
  "radiation_equations": "stationary physical-c FLD",
  "radiation_flux_semantics": "derived_fld_flux",
  "radiation_integrator": "backward_euler",
  "radiation_limiter": "levermore_pomraning",
  "radiation_model": "fld",
  "radiation_reduced_c_factor": 1.0,
  "reference_diffusion_coefficient": 5.99584916e+19,
  "reference_exact_for_solver": false,
  "reference_generator_sha256": "bba8ef1de664777cb12bc4301a1622a72298ba4702cd525007a41b30b34fc3c5",
  "reference_kind": "linear-diffusion-limit",
  "reference_model": "periodic-constant-diffusion",
  "reference_sampling": "cell averages",
  "reference_sha256": "dbb5cad328512e5129c3fdc7b1b9dd58c23eef55a783d7ece8eb68ebca834691",
  "status": "complete",
  "time": 0.25,
  "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": "Periodic constant-D heat-equation reference for the represented initial energy, D=c/(3 chi), with derived F=-D grad(E). This is a diffusion-limit reference for nonlinear Levermore-Pomraning FLD; finite-gradient limiter differences remain even with vanishing numerical error. Reported errors are slice differences."
}
FLD radiation energy, analytic diffusion-limit reference, and signed difference. Central cell layer at z=dx/2; ray at y=z=dx/2.
FLD radiation energy, analytic diffusion-limit reference, and signed difference. Central cell layer at z=dx/2; ray at y=z=dx/2. · PDF
Radiation energy and derived FLD flux against analytic diffusion-limit profiles, with signed differences. The reference does not include the nonlinear flux limiter.
Radiation energy and derived FLD flux against analytic diffusion-limit profiles, with signed differences. The reference does not include the nonlinear flux limiter. · PDF
Derived FLD flux maps
Derived FLD fx: numerical flux, analytic diffusion-reference flux, and signed difference.
Derived FLD fx: numerical flux, analytic diffusion-reference flux, and signed difference. · PDF
Derived FLD fy: numerical flux, analytic diffusion-reference flux, and signed difference.
Derived FLD fy: numerical flux, analytic diffusion-reference flux, and signed difference. · PDF
Derived FLD fz: numerical flux, analytic diffusion-reference flux, and signed difference.
Derived FLD fz: numerical flux, analytic diffusion-reference flux, and signed difference. · PDF

Accepted implicit solves

Accepted steps: 10; substeps: 10; timestep retries: 0; maximum nonlinear residual: 2.488513e-11; maximum absolute coupled energy error per accepted step: 3.747003e+15.

Projected-slice differences from the analytic reference

Area-weighted L1, L2, and maximum differences on the exported positive-side slice; these are not full-volume norms or a pure discretization error. No convergence order is inferred. Energy-density and flux units are those recorded in the slice-units download.

FieldL1 differenceL2 differenceMaximum difference
er2.312297e-055.064725e-051.861876e-04
fx2.092399e+053.542431e+058.783358e+05
fy2.092399e+053.542431e+058.783358e+05
fz1.601308e+053.261437e+058.783358e+05

Radiation energy 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+000.000000e+00
Radiation energy after signed boundary transport and material exchange. Flux moments are not conserved variables in FLD.
Radiation energy after signed boundary transport and material exchange. Flux moments are not conserved variables in FLD. · PDF

Saved-state movie

Gaussian Pulse · L0 · FLD backward Euler

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

Snapshot times: 0, 0.125, 0.25 s.

Arrows show derived FLD diagnostic flux -D grad(E); radiation momentum is not evolved. Arrows have equal length and show direction only.

Final-time profiles compare FLD with a linear diffusion-limit analytic reference, not an exact solution of nonlinear flux-limited diffusion. The movie shows numerical states only.

Central z=0+ radiation energy slice with faint cell mesh and equal-length flux direction arrows. Arrows show derived FLD diagnostic flux -D grad(E); radiation momentum is not evolved. Gaussian energy excess above the recorded background uses a labeled logarithmic floor. Fixed color limits; actual stored Silo times held without solution interpolation. Final-time profiles compare FLD with a linear diffusion-limit analytic reference, not an exact solution of nonlinear flux-limited diffusion. The movie shows numerical states only. The maps show the full simulation domain without cropping.

Download MP4 · Rendering and timing metadata · Full run report

All campaign movies

Data and reproducibility

Reading FLD diagnostics

The profiles include an analytic linear diffusion-limit reference for radiation energy and flux, plus material energy in Marshak. The reference omits the nonlinear limiter; the Marshak reference also assumes a semi-infinite domain. Reported slice discrepancies combine these model differences with discretization and reference-evaluation errors. Numerical flux is derived as F = −D∇E and satisfies |F| ≤ cE; it is not an evolved M1 momentum variable.

The radiation energy ledger checks R = E(t) − E(t_ref) + B − S, with outward boundary energy B and material-to-radiation exchange S. Its fixed normalization is initial radiation energy, or bath energy times domain volume for cold Marshak heating. Coupled gas-plus-radiation errors per accepted implicit step are recorded separately in the solver diagnostics.

Nonlinear residuals, substeps, and retries are measured solver diagnostics. The short pilot checks the implementation and reporting pipeline; comparison of models is distinct from an accuracy benchmark or speedup at matched error.

Sources & provenance

Where this problem comes from

The periodic heat-equation Fourier solution above is implemented by radiation_results/cpp/gen_radiation_reference.cpp --model fld. The generator shares initial energy construction with M1, but evolves each mode by diffusion instead of the M1 telegraph propagator. The ReferenceData reader uses the resulting cell-average arrays.

Frigo & Johnson (2005), “The Design and Implementation of FFTW3”, describes the transform library used for the Fourier construction.

Levermore & Pomraning (1981), “A flux-limited diffusion theory,” ApJ 248, 321–334, derives flux-limited diffusion and its classical diffusion limit. The saved run's reference metadata distinguishes the analytic linear diffusion equations from the nonlinear limiter evolved by this solver.

Radiation method context

M1 RK1 evolves radiation energy and flux moments with the retained first-order radiation update. FLD evolves radiation energy and stationary material thermal energy with a coupled backward-Euler solve; its flux F = −D∇E is reconstructed from energy with the Levermore–Pomraning limiter. The scalar implicit transport solve uses composite-grid multigrid and an iterative linear solver. Both time integrators are first order.

The FLD runner currently supports the stationary Gaussian scattering pulse and Marshak heating test on the CPU at physical light speed. Streaming wave/front, equilibrium sphere, and moving radiation hydrodynamics are unsupported for FLD. Flux diagnostics in FLD are not independently evolved M1 moments and 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.