{
  "model": "isolated stationary 3D Coulomb point charges; k=q0=a=1",
  "date": "2026-10-18",
  "backend": "gpu",
  "precision": "float64",
  "python": "3.13.9",
  "numpy": "2.5.0",
  "gpu": {
    "device": "NVIDIA GeForce RTX 5060 Ti",
    "cupy": "14.1.1",
    "cuda_runtime": 12090,
    "precision": "float64"
  },
  "analytical_checks": {
    "exact_cases_max_absolute_error": 5.551115123125783e-17,
    "far_field": {
      "radii": [
        12.0,
        24.0,
        48.0,
        96.0
      ],
      "angle_radians": 0.31,
      "potential_relative_errors": [
        0.002896574400966907,
        0.0007235690049640817,
        0.0001808567175250432,
        4.5211965445924335e-05
      ],
      "field_relative_errors": [
        0.004553774956873383,
        0.0011336891881271755,
        0.0002831316309089981,
        7.076484383699556e-05
      ],
      "last_doubling_log_slopes": {
        "potential": -3.0001956718938034,
        "field": -4.000302169772117
      },
      "expected_slopes": {
        "potential": -3,
        "field": -4
      }
    },
    "negative_gradient_check": {
      "steps": [
        0.001,
        0.0005,
        0.00025
      ],
      "max_absolute_errors": [
        7.714192754026961e-07,
        1.928549123175749e-07,
        4.821355786832626e-08
      ],
      "expected_order": 2
    },
    "gauss_3d_surface_flux": {
      "quadrature": [
        48,
        96
      ],
      "positive_sphere": 12.56637061435916,
      "expected_positive": 12.566370614359172,
      "negative_sphere": -12.56637061435916,
      "expected_negative": -12.566370614359172,
      "empty_sphere": 4.0021928566017025e-18,
      "expected_empty": 0
    }
  },
  "field_line_tolerance_check": {
    "max_position_deviation_a": 1.335974436562233e-10,
    "rtol_pair": [
      1e-07,
      1e-10
    ],
    "max_step_pair": [
      0.06,
      0.015
    ]
  },
  "benchmarks": [
    {
      "sources": 4,
      "targets": 641601,
      "interactions": 2566404,
      "cpu_median_seconds": 0.39561359997605905,
      "cpu_all_seconds": [
        0.39561359997605905,
        0.39606719999574125,
        0.3731047000037506
      ],
      "gpu_median_seconds": 0.025738900003489107,
      "gpu_all_seconds": [
        0.025738900003489107,
        0.024068299971986562,
        0.02624939999077469
      ],
      "speedup_cpu_over_gpu": 15.37026057533269,
      "potential_max_absolute_difference": 0.0,
      "field_max_absolute_difference": 2.2737367544323206e-13,
      "field_max_scaled_difference": 7.011865462960715e-16
    },
    {
      "sources": 256,
      "targets": 65536,
      "interactions": 16777216,
      "cpu_median_seconds": 2.418161700014025,
      "cpu_all_seconds": [
        2.3908120000269264,
        2.46024100005161,
        2.418161700014025
      ],
      "gpu_median_seconds": 0.00869410001905635,
      "gpu_all_seconds": [
        0.008655699959490448,
        0.00869410001905635,
        0.008763199963141233
      ],
      "speedup_cpu_over_gpu": 278.1382425683769,
      "potential_max_absolute_difference": 0.0,
      "field_max_absolute_difference": 4.547473508864641e-13,
      "field_max_scaled_difference": 2.6977493370143814e-15
    },
    {
      "sources": 1024,
      "targets": 65536,
      "interactions": 67108864,
      "cpu_median_seconds": 6.92159309994895,
      "cpu_all_seconds": [
        6.859440799977165,
        7.030469499994069,
        6.92159309994895
      ],
      "gpu_median_seconds": 0.02165219996822998,
      "gpu_all_seconds": [
        0.021516099979635328,
        0.02165219996822998,
        0.021663399995304644
      ],
      "speedup_cpu_over_gpu": 319.67158580213203,
      "potential_max_absolute_difference": 0.0,
      "field_max_absolute_difference": 5.820766091346741e-11,
      "field_max_scaled_difference": 1.9761849449135976e-15
    }
  ],
  "benchmark_method": "3 timed repetitions after one warm-up per case/backend; median wall time; includes input transfers, compute, output transfers; FP64, Kahan accumulation; CPU uses vectorized source loop, GPU one thread per target. No rendering or ODE tracing timed.",
  "benchmark_note": "Previously measured core-kernel benchmarks retained; core unchanged. Analytic and planar-tracing checks rerun after symmetry changes."
}