Feat: Complete adaptive geodesic tracing with DP54
Add error-controlled DP5(4) integration and trusted first-crossing localization, including non-monotonic energy thresholds and representable-time stepping. Preserve adaptive state and independent step/time retry grants across RayPool, refinement and movie scheduling. Expose numerical controls, record actual persistent-sample costs, and add v3 lens-map provenance with legacy v2 RK4 import. Use DP54 by default and select an 8M Schwarzschild maximum step from bounded scans and a two-run 4K comparison. Retain the conservative minimum-step guard and document critical-ray and backend capability limits. Archive self-contained benchmark inputs and raw output; keep fixed RK4 HDR references explicit. Validation: make -B -j4 BUILD_TYPE=Debug test passed; explicit RK4 HDR references have zero differences. Bounded convergence checks, benchmark reproduction, Release build and focused reviews passed. No numerical-relativity backend is added.
This commit is contained in:
1 parent
c894fdb11a
commit
0a46a7095b
48 files changed
+11491
-380
No files matched your search
@@ -0,0 +1,224 @@
|
||||
# adaptive_step_bounds_2026-10-05
|
||||
|
||||
Long-term benchmark for calibrating the DP54 adaptive-integrator step bounds
|
||||
(`min_step` / `max_step`) of the past-directed null-geodesic tracer, and the
|
||||
public record of the one authorised 4K Schwarzschild `max_step` 2-vs-8 pair.
|
||||
|
||||
The benchmark runs the public endpoint `geodesic_trace_past()`, the production
|
||||
DP core, and bounded adaptive-mesh renders against the analytic
|
||||
Minkowski / Schwarzschild / Alcubierre backends. It does not modify production
|
||||
sources.
|
||||
|
||||
## Build (required before renderer scripts)
|
||||
|
||||
The Python mesh/4K drivers start from an existing renderer binary. The shell
|
||||
endpoint/core drivers compile their own small harnesses against production code.
|
||||
|
||||
```
|
||||
make -j4 BUILD_TYPE=Release SPACETIME=schwarzschild backend
|
||||
# binary: build/Release/schwarzschild_sky
|
||||
```
|
||||
|
||||
## Files
|
||||
|
||||
| file | role |
|
||||
|---|---|
|
||||
| `a_public_endpoints.c` | Experiment A: step-bound scans through the public endpoint, tol=1e-12 reference, RK4 h-halving on near-critical rays. |
|
||||
| `b_actual_h.c` | Experiment B: textually includes `src/geodesic.c`, drives the production `dp_advance_one` on finite trusted intervals to measure observed accepted `h`. |
|
||||
| `critical_ref_check.c` | Critical-classification probe (r30/r100 inward, r2.1 outward; `theta_crit` and `theta_crit±1e-7`; tol/max_step ladder). |
|
||||
| `mesh_maps.py` | Pure GRLENS v3 `load`/`compare`; no renderer, no untracked import. |
|
||||
| `run_mesh.py` | 8 bounded 320x180 candidates (R100 and R2.1, `max_step` .5/2/8/32). |
|
||||
| `run_mesh_reference.py` | 2 tight-tolerance references and comparisons against the 8 maps. |
|
||||
| `summarize_4k.py` | Postprocess existing maps only; never invokes a renderer. |
|
||||
| `run_4k_pair.py` | One-task, at-most-two-attempt 4K pair; refuses to run without `--authorize-two-4k`. |
|
||||
| `record_environment.py` | Provenance (git/hashes/compiler/cpu/build/run commands); no render. |
|
||||
| `failure_floor.c` | Failure-path floor diagnostic; includes `../../tests/test_geodesic_adaptive.c`. |
|
||||
| `run_failure_floor.sh` | Builds/runs `failure_floor.c` with `-DGEODESIC_EVENT_TESTING`. |
|
||||
| `run_limited.sh` | Builds/runs Experiment A + B; all output under `OUT_DIR`. |
|
||||
| `run_critical_ref.sh` | Builds/runs `critical_ref_check.c`; all output under `OUT_DIR`. |
|
||||
| `summarize.py` | `OUT_DIR` CLI arg (default `local/adaptive_step_bounds_2026-10-05`); writes `OUT_DIR/logs/summary.txt`. |
|
||||
| `results/` | Tracked long-term evidence (see below). |
|
||||
|
||||
## Reproduction
|
||||
|
||||
```
|
||||
AB_OUT="$PWD/local/adaptive_step_bounds_2026-10-05"
|
||||
OUT="$PWD/local/adaptive_bounds_mesh"
|
||||
|
||||
bash benchmarks/adaptive_step_bounds_2026-10-05/run_limited.sh "$AB_OUT"
|
||||
bash benchmarks/adaptive_step_bounds_2026-10-05/run_critical_ref.sh "$AB_OUT"
|
||||
python3 benchmarks/adaptive_step_bounds_2026-10-05/summarize.py "$AB_OUT"
|
||||
|
||||
python3 benchmarks/adaptive_step_bounds_2026-10-05/run_mesh.py "$OUT"
|
||||
python3 benchmarks/adaptive_step_bounds_2026-10-05/run_mesh_reference.py "$OUT"
|
||||
bash benchmarks/adaptive_step_bounds_2026-10-05/run_failure_floor.sh "$OUT"
|
||||
|
||||
# 4K only after explicit fresh user authorization for that task:
|
||||
python3 benchmarks/adaptive_step_bounds_2026-10-05/run_4k_pair.py \
|
||||
--authorize-two-4k --out local/adaptive_bounds_4k
|
||||
```
|
||||
|
||||
Defaults: A/B `OUT_DIR` is `local/adaptive_step_bounds_2026-10-05`; mesh
|
||||
`OUT_DIR` is `local/adaptive_bounds_mesh`; 4K `--out` default is
|
||||
`local/adaptive_bounds_4k`. All logs/CSV go to `OUT_DIR`; the tracked
|
||||
benchmark directory holds only sources and `results/`. Scratch binaries go to
|
||||
`/tmp/opencode/step_bounds/`.
|
||||
|
||||
The `run_4k_pair.py` driver refuses to run without `--authorize-two-4k`, keeps
|
||||
an attempt ledger, and has no automatic retry. Authorisation does not extend to
|
||||
later tasks or routine tests.
|
||||
|
||||
All catalog inputs are generated inline by the scripts (column header
|
||||
`longitude_deg,latitude_deg,temperature_K,amplitude`, one 1e-30 star); no
|
||||
external survey CSV is read.
|
||||
|
||||
## Results
|
||||
|
||||
### 1. Public-endpoint step-bound scan (Experiment A/B)
|
||||
|
||||
Environment and full table inputs: `results/source_environment.txt`,
|
||||
`results/summary_tables.txt`; full stdout: `results/expA.log`,
|
||||
`results/expB.log`. Per-ray raw CSV (not tracked) is reproduced by
|
||||
`run_limited.sh`.
|
||||
|
||||
| backend | worst near-critical sky error vs tol=1e-12 ref | notes |
|
||||
|---|---|---|
|
||||
| Schwarzschild r30 | 2.82e-4 rad (`max_step`≥1); 8.67e-5 rad at 0.25 | r100 8.0e-5 / 2.6e-5; r2.1 2.87e-4 |
|
||||
| Minkowski | Δn = 0, Δg/g = 0 (analytic) | crossing x/t ≤ 7.7e-11 at `max_step`≤256 |
|
||||
| Alcubierre | ≤1.8e-10 rad, no class change | 8x vs 1x `initial` RHS cost 4.3x–5.7x |
|
||||
|
||||
- Dark terminal `L−L0` margin agrees with the reference to ≤2.1e-13 in every
|
||||
config; near-critical dark stop times differ up to ~41 time units between
|
||||
tol=1e-9 and tol=1e-12 (orbit-count sensitivity, reported not hidden).
|
||||
- Schwarzschild floor plateau: `min_step` `1e-14 … 1e-2` give bit-identical
|
||||
results and RHS; only `0.1` breaks one r1.5 ray
|
||||
(`INCOMPLETE/INTEGRATION_ERROR`). No evidence to raise the default floor,
|
||||
and no evidence that `1e-12` is uniquely optimal (it is never active).
|
||||
- Observed accepted `h` (Experiment B, finite window `T=min(20, ref span)`):
|
||||
**Schwarzschild only** — r1.5 radial 0.0921, all other sampled Schwarzschild
|
||||
rays ≥0.1; Alcubierre minimum = its initial step (0.05 / 0.005 / 0.0005);
|
||||
Minkowski 1.0. This is a finite-window diagnostic, **not** a full-trajectory
|
||||
minimum.
|
||||
- RK4 h-halving worst (r2.1, `theta_crit−1e-7`): 1.04e-5 rad.
|
||||
|
||||
### 2. Bounded 320x180 adaptive mesh
|
||||
|
||||
Numeric inputs: `results/mesh_summary.json`,
|
||||
`results/mesh_reference_summary.json`. Scene: R100/FOV45/jacobian0.2 and
|
||||
R2.1/outward/FOV90; DP54, hmin 1e-12, initial 0.1, tol 1e-9 (tight reference
|
||||
1e-12), 8 threads, one-point dim catalog.
|
||||
|
||||
| scene | `max_step` | persistent vertices | RHS | wall (s) |
|
||||
|---|---:|---:|---:|---:|
|
||||
| R100 | 0.5 | 3158 | 16813349 | 2.071 |
|
||||
| R100 | 2 | 3158 | 6030185 | 0.979 |
|
||||
| R100 | 8 | 3158 | 4230835 | 0.823 |
|
||||
| R100 | 32 | 3158 | 4081609 | 0.830 |
|
||||
| R2.1 | 0.5 | 5496 | 20136508 | 1.974 |
|
||||
| R2.1 | 2 | 5496 | 9548434 | 1.178 |
|
||||
| R2.1 | 8 | 5496 | 7389760 | 0.970 |
|
||||
| R2.1 | 32 | 5496 | 7197806 | 0.972 |
|
||||
|
||||
- 2→8 RHS reduction 29.84% (R100) / 22.61% (R2.1); 8→32 only 3.53% / 2.60%.
|
||||
- Identical terminal classifications and mesh/sample counts for all four caps.
|
||||
- Error vs tight reference: R100 max sky 9.216e-8 (hmax2) / 8.744e-8 (hmax8),
|
||||
mutual 2-vs-8 difference 7.063e-9 rad; R2.1 max sky 1.4772e-5 rad at both,
|
||||
mutual difference 8.370e-11 rad. The larger R2.1 reference error is
|
||||
tolerance/conditioning sensitive and is not cured by a smaller `max_step`.
|
||||
- Max log-frequency differences ≤8.51e-10 (R100) / ≤2.10e-9 (R2.1).
|
||||
- Short single-run wall times include setup/cache/output; not a timing study.
|
||||
|
||||
### 3. One authorised 4K pair (R100, 3840x2160, FOV45)
|
||||
|
||||
Raw terminal output (byte-for-byte): `results/4k_hmax2.log`,
|
||||
`results/4k_hmax8.log`; provenance: `results/4k_metadata.json`,
|
||||
`results/4k_attempts.json`; postprocessed: `results/4k_final_summary.json`,
|
||||
`results/4k_raw_summary.log`.
|
||||
|
||||
| metric | `max_step`=2 | `max_step`=8 |
|
||||
|---|---:|---:|
|
||||
| persistent vertices / triangles | 66045 / 131338 | 66045 / 131338 |
|
||||
| outcomes | 62419 ESC, 3626 DARK | 62419 ESC, 3626 DARK |
|
||||
| unresolved / error | 0 | 0 |
|
||||
| persistent accepted | 15,768,677 | 10,183,020 |
|
||||
| persistent rejected | 97,176 | 194,781 |
|
||||
| persistent RHS | 130,409,139 | 91,991,144 |
|
||||
| trace+refine time (s) | 10.774 | 7.805 |
|
||||
| process wall (s) | 11.3893 | 8.38925 |
|
||||
|
||||
- Triangle payload is bit-identical; shared film identities 66045, terminal
|
||||
mismatches 0; max mutual endpoint sky difference 7.9544e-7 rad, max logg
|
||||
difference 3.4711e-11.
|
||||
- Persistent-vertex RHS reduction −29.46%; accepted −35.42%; wall −26.34%.
|
||||
- **Cost scope:** the v3 map stores final persistent vertices only. The
|
||||
requested-sample count including discarded refinement probes is 116308
|
||||
(> 66045), so discarded probes contribute no stored cost and these sums must
|
||||
not be read as full-render executed RHS totals.
|
||||
- **Timing:** one sequential pair only; no statistical timing confidence.
|
||||
- PSF splat cached/direct = 0 and `--psf-min-y` discarded 1965 (hmax2) / 1954
|
||||
(hmax8) events; this does not measure image error. The PNGs are dark
|
||||
diagnostic backgrounds; no 2MASS catalog was used.
|
||||
|
||||
### 4. Critical-classification reference check
|
||||
|
||||
Full output: `results/critical_ref.log`, `results/critical_ref.csv` (36
|
||||
endpoint traces). The exact `theta_crit` direction is a classification
|
||||
separatrix; it is reported, never asserted.
|
||||
|
||||
- r2.1 `theta_crit`: ref tol1e-12/h0.25 vs tol1e-13/h0.125 sky difference
|
||||
**2.33638 rad** — the exactly-critical escape direction is not
|
||||
independently converged. `EXACT_CRITICAL_REFERENCE_NOT_CONVERGED`.
|
||||
- r30 `theta_crit` (DARK) stop-time difference 13.056; r100 `theta_crit` (DARK)
|
||||
12.700. At tol1e-11, h2-vs-h8 at r2.1 `theta_crit` is 5.09e-5 rad.
|
||||
- Neighbours `±1e-7`: both reference tiers agree (same outcome/reason/end,
|
||||
clean, positive steps) at every neighbour. Escaped-neighbour sky differences
|
||||
between the layers are ~1e-7 rad (9.47e-8 r30, 2.74e-8 r100, 1.42e-7 r2.1),
|
||||
consistent with the loose 1e-4 magnitude trend; DARK neighbours report
|
||||
stop-time differences 1.5e-7 … 7.5e-7.
|
||||
- `CRITICAL_REFERENCE_CHECK status=0` (no neighbour reference disagreement or
|
||||
error endpoint).
|
||||
|
||||
## Decision summary
|
||||
|
||||
- **Schwarzschild `max_step = 8`**: supported by the far-field cost plateau
|
||||
(2→8 saves ~23–30% persistent RHS; 8→32 only ~3%) together with the tight
|
||||
reference and 4K 2-vs-8 comparisons. This is not claimed as globally optimal
|
||||
and gives no guarantee for arbitrary near-critical/shadow directions.
|
||||
- **`min_step = 1e-12`**: retained as a non-binding numerical guard; not a
|
||||
measured optimum.
|
||||
- **Minkowski `max_step = 16`** and **Alcubierre `max_step = 8 × initial`**:
|
||||
retained as conservative caps. Their bounded accuracy checks support keeping
|
||||
these values, not claiming cost optimality; larger Alcubierre caps still
|
||||
reduce RHS, but have larger frequency errors in some cases.
|
||||
- The R2.1 exactly-critical difference is tolerance-sensitive;
|
||||
`critical_ref_check.c` confirms the exact direction is not
|
||||
independently converged and the report does not treat it as certified.
|
||||
|
||||
## Caveats
|
||||
|
||||
- Analytic backends only; no time-dependent numerical-relativity metric was
|
||||
exercised. Bounds and the `unit = 1` calibration are not transferable to NR.
|
||||
- Experiment B samples `T = min(20, reference span)`; no full-trajectory
|
||||
minimum-step claim is made.
|
||||
- The 4K numbers are one sequential pair; no timing-stability confidence and
|
||||
no image-error bound (inverse-lens-map Jacobian amplification is separate).
|
||||
- Sky-angle differences divided by pixel angle are not inverse-lens-map image
|
||||
error bounds.
|
||||
- `failure_floor.c` reuses the regression invalid-metric temporal-domain
|
||||
fixture; it is not a physical shadow or floor calibration.
|
||||
|
||||
## Verification of the selected defaults and reproduction tools
|
||||
|
||||
`make -B -j4 BUILD_TYPE=Debug test` passed after selecting the Schwarzschild
|
||||
cap of 8 and adding CLI provenance assertions for the default bounds. Full
|
||||
terminal output is retained locally at
|
||||
`local/step_bounds_mesh/final_debug_tests.log` (`STEP_BOUNDS_FULL_DEBUG_EXIT=0`).
|
||||
The explicit-RK4 HDR reference tests remain bit-identical. The Release
|
||||
Schwarzschild binary was rebuilt with the selected default.
|
||||
|
||||
The self-contained limited driver was also executed with the relative output
|
||||
path `local/step_bounds_reproduction`: 1500 endpoint traces and 2427 observed
|
||||
finite-window steps completed, including summary generation. Small angular
|
||||
differences use `atan2(|cross|,dot)` rather than rounded `acos(dot)`. Running the
|
||||
4K driver without fresh explicit authorization refuses with exit code 2;
|
||||
this check launches no renderer. No further 4K attempt was made.
|
||||
@@ -0,0 +1,867 @@
|
||||
/*
|
||||
* Experiment A: DP54 step-bound scan through the *public* production
|
||||
* endpoint geodesic_trace_past().
|
||||
*
|
||||
* Sub-commands:
|
||||
* schwarzschild : r30/r100 static inward, r2.1 static outward, r1.5 free-fall
|
||||
* minkowski : moving observer, escape sphere 64, analytic flat check
|
||||
* alcubierre : comoving bubble-center camera, vs .3/.9, sigma 1/10/100
|
||||
*
|
||||
* Each sub-command computes one DP54 tol=1e-12 reference per ray, then scans
|
||||
* - upper scan : max_step over a list, min_step fixed
|
||||
* - min scan : min_step over a list, max_step fixed
|
||||
* and compares every result against the reference (class, sky angle, g,
|
||||
* dark threshold margin / stop time, cost). Raw per-ray CSV and stdout
|
||||
* summaries are produced. No production source is modified.
|
||||
*
|
||||
* Link line (do NOT link geodesic.c twice; the backends are textually included
|
||||
* below, so only the common sources are linked):
|
||||
* cc -std=c11 -O2 -Isrc a_public_endpoints.c geodesic.c asymptotic.c \
|
||||
* asymptotic_schwarzschild.c spacetime_common.c observer.c -lm
|
||||
*/
|
||||
#define _POSIX_C_SOURCE 200809L
|
||||
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
/* Textually include all three analytic backends with renamed default
|
||||
* constructors so one binary can exercise every provider (the files each
|
||||
* define spacetime_create_default, which would collide at link time). */
|
||||
#define spacetime_create_default spacetime_create_default_minkowski_local
|
||||
#include "../../src/spacetime_minkowski.c"
|
||||
#undef spacetime_create_default
|
||||
#define spacetime_create_default spacetime_create_default_schwarzschild_local
|
||||
#include "../../src/spacetime_schwarzschild.c"
|
||||
#undef spacetime_create_default
|
||||
#define spacetime_create_default spacetime_create_default_alcubierre_local
|
||||
#include "../../src/spacetime_alcubierre.c"
|
||||
#undef spacetime_create_default
|
||||
|
||||
#include "geodesic.h"
|
||||
#include "observer.h"
|
||||
#include "spacetime.h"
|
||||
|
||||
#define PI 3.14159265358979323846
|
||||
#define MAX_CASES 16
|
||||
#define MAX_DIRS 16
|
||||
#define RAY_CAP 2500
|
||||
|
||||
static long g_rays = 0;
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Small helpers */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
static double dot3(const double a[3], const double b[3]) {
|
||||
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
||||
}
|
||||
|
||||
static double ang_delta(const double a[3], const double b[3]) {
|
||||
const double na = sqrt(dot3(a, a)), nb = sqrt(dot3(b, b));
|
||||
if (!(na > 0.0) || !(nb > 0.0))
|
||||
return NAN;
|
||||
const double ca = dot3(a, b) / (na * nb);
|
||||
const double cross[3] = {a[1] * b[2] - a[2] * b[1],
|
||||
a[2] * b[0] - a[0] * b[2],
|
||||
a[0] * b[1] - a[1] * b[0]};
|
||||
const double sn = sqrt(dot3(cross, cross)) / (na * nb);
|
||||
return atan2(sn, ca);
|
||||
}
|
||||
|
||||
static double now_s(void) {
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
return (double)ts.tv_sec + 1e-9 * (double)ts.tv_nsec;
|
||||
}
|
||||
|
||||
static int is_dark(int outcome) { return outcome == RAY_OUTCOME_DARK; }
|
||||
static int is_escaped(int outcome) { return outcome == RAY_OUTCOME_ESCAPED; }
|
||||
|
||||
/* Critical local angle (static observer, M=1) for the Schwarzschild monopole.
|
||||
* theta_c = asin(3 sqrt(3) sqrt(1-2/r) / r). */
|
||||
static double critical_angle(double r) {
|
||||
const double b = 3.0 * sqrt(3.0) * sqrt(1.0 - 2.0 / r) / r;
|
||||
if (!(b < 1.0))
|
||||
return PI / 2.0;
|
||||
return asin(b);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Case / result / comparison structures */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
typedef struct {
|
||||
char name[32];
|
||||
int prov; /* 0 schwarzschild, 1 minkowski, 2 alcubierre */
|
||||
double mass, escape_radius;
|
||||
double alc_vs, alc_radius, alc_sigma;
|
||||
double look_ra_deg, look_dec_deg;
|
||||
double position[3], velocity[3];
|
||||
double initial_step, lookback;
|
||||
unsigned int max_steps;
|
||||
unsigned int ref_max_steps; /* budget for the tol=1e-12 reference only */
|
||||
double max_step_for_min_scan; /* fixed upper during the min scan */
|
||||
int n_dirs;
|
||||
double dirs[MAX_DIRS][3];
|
||||
double theta[MAX_DIRS]; /* NAN for non-angle direction sets */
|
||||
} Case;
|
||||
|
||||
typedef struct {
|
||||
int outcome, reason, end_id;
|
||||
double stop_t, g, thr;
|
||||
double n[3];
|
||||
unsigned int steps, rejected;
|
||||
unsigned long rhs;
|
||||
double wall;
|
||||
} Res;
|
||||
|
||||
typedef struct {
|
||||
int has_ref;
|
||||
int class_match;
|
||||
double dn_ang, dlogg, dgrel, dstopT, dmargin;
|
||||
} Cmp;
|
||||
|
||||
typedef struct {
|
||||
long n, class_mismatch;
|
||||
double max_dn_ang, max_dlogg, max_dgrel, max_dstopT, max_dmargin;
|
||||
unsigned long sum_rhs, max_rhs;
|
||||
unsigned int max_rejected;
|
||||
double sum_wall;
|
||||
long escaped, dark, unresolved, incomplete;
|
||||
} Agg;
|
||||
|
||||
static void agg_init(Agg *a) {
|
||||
memset(a, 0, sizeof *a);
|
||||
a->max_dn_ang = a->max_dlogg = a->max_dgrel = a->max_dstopT =
|
||||
a->max_dmargin = -1.0;
|
||||
}
|
||||
|
||||
static void bump(double *m, double v) {
|
||||
if (!isfinite(v))
|
||||
return;
|
||||
if (v > *m)
|
||||
*m = v;
|
||||
}
|
||||
|
||||
static void agg_add(Agg *a, const Res *r, const Cmp *c) {
|
||||
++a->n;
|
||||
if (c->has_ref && !c->class_match)
|
||||
++a->class_mismatch;
|
||||
if (c->has_ref) {
|
||||
bump(&a->max_dn_ang, c->dn_ang);
|
||||
bump(&a->max_dlogg, c->dlogg);
|
||||
bump(&a->max_dgrel, c->dgrel);
|
||||
bump(&a->max_dstopT, c->dstopT);
|
||||
bump(&a->max_dmargin, c->dmargin);
|
||||
}
|
||||
a->sum_rhs += r->rhs;
|
||||
if (r->rhs > a->max_rhs)
|
||||
a->max_rhs = r->rhs;
|
||||
if (r->rejected > a->max_rejected)
|
||||
a->max_rejected = r->rejected;
|
||||
a->sum_wall += r->wall;
|
||||
if (is_dark(r->outcome))
|
||||
++a->dark;
|
||||
else if (is_escaped(r->outcome))
|
||||
++a->escaped;
|
||||
else if (r->outcome == RAY_OUTCOME_UNRESOLVED)
|
||||
++a->unresolved;
|
||||
else
|
||||
++a->incomplete;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Config builders */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
static GeodesicTraceConfig make_dp(double initial, double min_step,
|
||||
double max_step, double tol,
|
||||
unsigned int max_steps, double lookback) {
|
||||
GeodesicTraceConfig c;
|
||||
memset(&c, 0, sizeof c);
|
||||
c.coordinate_time_step = initial;
|
||||
c.max_steps = max_steps;
|
||||
c.threshold.kind = THRESHOLD_LOG_ENERGY_GROWTH;
|
||||
c.threshold.value = 8.0;
|
||||
c.threshold.policy_version = 3;
|
||||
c.stepper = GEODESIC_STEPPER_DP54;
|
||||
c.atol_x = tol;
|
||||
c.atol_Pi = tol;
|
||||
c.atol_L = tol;
|
||||
c.rtol = tol;
|
||||
c.min_step = min_step;
|
||||
c.max_step = max_step;
|
||||
c.consecutive_rejection_limit = 32;
|
||||
c.max_lookback_time = lookback;
|
||||
return c;
|
||||
}
|
||||
|
||||
static GeodesicTraceConfig make_rk4(double step, unsigned int max_steps) {
|
||||
GeodesicTraceConfig c;
|
||||
memset(&c, 0, sizeof c);
|
||||
c.coordinate_time_step = step;
|
||||
c.max_steps = max_steps;
|
||||
c.threshold.kind = THRESHOLD_LOG_ENERGY_GROWTH;
|
||||
c.threshold.value = 8.0;
|
||||
c.threshold.policy_version = 3;
|
||||
c.stepper = GEODESIC_STEPPER_RK4;
|
||||
return c;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Trace + compare */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
static Res run_ray(const SpacetimeSource *source, const ObserverState *observer,
|
||||
const double dir[3], const GeodesicTraceConfig *config) {
|
||||
Res r;
|
||||
memset(&r, 0, sizeof r);
|
||||
++g_rays;
|
||||
if (g_rays > RAY_CAP) {
|
||||
fprintf(stderr, "FATAL: ray cap %d exceeded\n", RAY_CAP);
|
||||
exit(3);
|
||||
}
|
||||
const double t0 = now_s();
|
||||
const RayEndpoint e = geodesic_trace_past(source, observer, dir, config);
|
||||
r.wall = now_s() - t0;
|
||||
r.outcome = e.outcome;
|
||||
r.reason = e.reason;
|
||||
r.end_id = e.end_id;
|
||||
r.stop_t = e.stop_coordinate_time;
|
||||
r.g = e.frequency_ratio;
|
||||
r.thr = e.threshold_value;
|
||||
for (int i = 0; i < 3; ++i)
|
||||
r.n[i] = e.n_infinity[i];
|
||||
r.steps = e.accepted_steps;
|
||||
r.rejected = e.rejected_steps;
|
||||
r.rhs = e.rhs_evaluations;
|
||||
return r;
|
||||
}
|
||||
|
||||
static void compare(const Res *a, const Res *ref, Cmp *c) {
|
||||
memset(c, 0, sizeof *c);
|
||||
c->has_ref = 1;
|
||||
c->class_match = (a->outcome == ref->outcome && a->reason == ref->reason);
|
||||
if (is_escaped(a->outcome) && is_escaped(ref->outcome)) {
|
||||
c->dn_ang = ang_delta(a->n, ref->n);
|
||||
if (a->g > 0.0 && ref->g > 0.0 && isfinite(a->g) && isfinite(ref->g)) {
|
||||
c->dlogg = fabs(log(a->g) - log(ref->g));
|
||||
c->dgrel = fabs(a->g / ref->g - 1.0);
|
||||
} else {
|
||||
c->dlogg = c->dgrel = NAN;
|
||||
}
|
||||
} else {
|
||||
c->dn_ang = c->dlogg = c->dgrel = NAN;
|
||||
}
|
||||
c->dstopT = (isfinite(a->stop_t) && isfinite(ref->stop_t))
|
||||
? fabs(a->stop_t - ref->stop_t)
|
||||
: NAN;
|
||||
c->dmargin = (is_dark(a->outcome) && is_dark(ref->outcome) &&
|
||||
isfinite(a->thr) && isfinite(ref->thr))
|
||||
? fabs(a->thr - ref->thr)
|
||||
: NAN;
|
||||
}
|
||||
|
||||
static void write_row(FILE *f, const char *phase, const Case *c, int di,
|
||||
double upper, double min_step, double tol, const Res *r,
|
||||
const Cmp *cmp) {
|
||||
fprintf(f,
|
||||
"%s,%s,%d,%.17g,%.6g,%.6g,%.6g,%d,%d,%u,%.17g,%u,%u,%lu,%.6g,"
|
||||
"%.17g,%.17g,%.17g,%.17g,%.17g",
|
||||
phase, c->name, di, c->theta[di], upper, min_step, tol, r->outcome,
|
||||
r->reason, r->end_id, r->stop_t, r->steps, r->rejected, r->rhs,
|
||||
r->wall, r->n[0], r->n[1], r->n[2], r->g, r->thr);
|
||||
if (cmp->has_ref)
|
||||
fprintf(f, ",%d,%.17g,%.17g,%.17g,%.17g,%.17g", cmp->class_match,
|
||||
cmp->dn_ang, cmp->dlogg, cmp->dgrel, cmp->dstopT, cmp->dmargin);
|
||||
else
|
||||
fprintf(f, ",,nan,nan,nan,nan,nan");
|
||||
fprintf(f, "\n");
|
||||
}
|
||||
|
||||
static const char *ROW_HEADER =
|
||||
"phase,case,dir,theta,upper,min_step,tol,outcome,reason,end_id,stop_t,"
|
||||
"steps,rejected,rhs,wall_s,nx,ny,nz,g,thr,class_match,dn_ang,dlogg,dgrel,"
|
||||
"dstopT,dmargin\n";
|
||||
|
||||
static void write_agg(FILE *f, const char *phase, const Case *c, double upper,
|
||||
double min_step, double tol, const Agg *a) {
|
||||
fprintf(f,
|
||||
"%s,%s,%.6g,%.6g,%.6g,%ld,%ld,%.6g,%.6g,%.6g,%.6g,%.6g,%lu,%lu,%u,"
|
||||
"%.4f,%ld,%ld,%ld,%ld\n",
|
||||
phase, c->name, upper, min_step, tol, a->n, a->class_mismatch,
|
||||
a->max_dn_ang, a->max_dlogg, a->max_dgrel, a->max_dstopT,
|
||||
a->max_dmargin, a->sum_rhs, a->max_rhs, a->max_rejected, a->sum_wall,
|
||||
a->escaped, a->dark, a->unresolved, a->incomplete);
|
||||
}
|
||||
|
||||
static const char *AGG_HEADER =
|
||||
"phase,case,upper,min_step,tol,n,class_mismatch,max_dn_ang,max_dlogg,"
|
||||
"max_dgrel,max_dstopT,max_dmargin,sum_rhs,max_rhs,max_rejected,sum_wall,"
|
||||
"escaped,dark,unresolved,incomplete\n";
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Case builders */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
static void dir_from_theta(double th, double n[3]) {
|
||||
if (th == 0.0) {
|
||||
n[0] = 1.0;
|
||||
n[1] = n[2] = 0.0;
|
||||
} else if (th == PI) {
|
||||
n[0] = -1.0;
|
||||
n[1] = n[2] = 0.0;
|
||||
} else {
|
||||
n[0] = cos(th);
|
||||
n[1] = sin(th);
|
||||
n[2] = 0.0;
|
||||
}
|
||||
const double nn = sqrt(dot3(n, n));
|
||||
for (int i = 0; i < 3; ++i)
|
||||
n[i] /= nn;
|
||||
}
|
||||
|
||||
static void fill_static_dirs(Case *c, double r) {
|
||||
const double tc = critical_angle(r);
|
||||
const double th[MAX_DIRS] = {0.0, PI, PI / 2.0, tc,
|
||||
tc - 1e-3, tc + 1e-3, tc - 1e-5, tc + 1e-5,
|
||||
tc - 1e-7, tc + 1e-7, tc + 0.05, tc - 0.05};
|
||||
c->n_dirs = 12;
|
||||
for (int i = 0; i < c->n_dirs; ++i) {
|
||||
c->theta[i] = th[i];
|
||||
dir_from_theta(th[i], c->dirs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void case_static(Case *c, const char *name, double r, double look_ra) {
|
||||
memset(c, 0, sizeof *c);
|
||||
snprintf(c->name, sizeof c->name, "%s", name);
|
||||
c->prov = 0;
|
||||
c->mass = 1.0;
|
||||
c->escape_radius = 256.0;
|
||||
c->look_ra_deg = look_ra;
|
||||
c->look_dec_deg = 0.0;
|
||||
c->position[0] = r;
|
||||
c->position[1] = c->position[2] = 0.0;
|
||||
c->velocity[0] = c->velocity[1] = c->velocity[2] = 0.0;
|
||||
c->initial_step = 0.1;
|
||||
c->lookback = 6553.6;
|
||||
c->max_steps = 65536;
|
||||
c->ref_max_steps = 65536;
|
||||
c->max_step_for_min_scan = 2.0;
|
||||
fill_static_dirs(c, r);
|
||||
}
|
||||
|
||||
static void case_freefall(Case *c, const char *name, double r) {
|
||||
memset(c, 0, sizeof *c);
|
||||
snprintf(c->name, sizeof c->name, "%s", name);
|
||||
c->prov = 0;
|
||||
c->mass = 1.0;
|
||||
c->escape_radius = 256.0;
|
||||
c->look_ra_deg = 180.0;
|
||||
c->look_dec_deg = 0.0;
|
||||
c->position[0] = r;
|
||||
c->position[1] = c->position[2] = 0.0;
|
||||
/* Free-fall from rest at infinity, coordinate velocity dx/dt (the formula
|
||||
* used by local/p2d_validation/observer_endpoints.c). */
|
||||
const double y = sqrt(2.0 / r);
|
||||
c->velocity[0] = -y * (1.0 + y) / (1.0 + y + y * y);
|
||||
c->velocity[1] = c->velocity[2] = 0.0;
|
||||
c->initial_step = 0.1;
|
||||
c->lookback = 6553.6;
|
||||
c->max_steps = 65536;
|
||||
c->ref_max_steps = 65536;
|
||||
c->max_step_for_min_scan = 2.0;
|
||||
{
|
||||
const double th[4] = {0.0, PI / 2.0, PI, 3.0 * PI / 4.0};
|
||||
c->n_dirs = 4;
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
c->theta[i] = th[i];
|
||||
dir_from_theta(th[i], c->dirs[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void case_minkowski(Case *c) {
|
||||
memset(c, 0, sizeof *c);
|
||||
snprintf(c->name, sizeof c->name, "mink_moving");
|
||||
c->prov = 1;
|
||||
c->escape_radius = 64.0;
|
||||
c->look_ra_deg = 0.0;
|
||||
c->look_dec_deg = 0.0;
|
||||
c->position[0] = 10.0;
|
||||
c->position[1] = 20.0;
|
||||
c->position[2] = -15.0;
|
||||
c->velocity[0] = 0.3;
|
||||
c->velocity[1] = 0.2;
|
||||
c->velocity[2] = 0.1;
|
||||
c->initial_step = 1.0;
|
||||
c->lookback = 2048.0;
|
||||
c->max_steps = 2048;
|
||||
c->ref_max_steps = 4096;
|
||||
c->max_step_for_min_scan = 16.0;
|
||||
{
|
||||
const double d[6][3] = {{1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0},
|
||||
{0.0, 1.0, 0.0}, {0.0, 0.0, 1.0},
|
||||
{0.6, 0.8, 0.0}, {-0.6, 0.8, 0.0}};
|
||||
c->n_dirs = 6;
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
c->theta[i] = NAN;
|
||||
for (int k = 0; k < 3; ++k)
|
||||
c->dirs[i][k] = d[i][k];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void case_alcubierre(Case *c, const char *name, double vs, double sigma) {
|
||||
memset(c, 0, sizeof *c);
|
||||
snprintf(c->name, sizeof c->name, "%s", name);
|
||||
c->prov = 2;
|
||||
c->alc_vs = vs;
|
||||
c->alc_radius = 1.0;
|
||||
c->alc_sigma = sigma;
|
||||
c->look_ra_deg = 0.0;
|
||||
c->look_dec_deg = 0.0;
|
||||
c->position[0] = c->position[1] = c->position[2] = 0.0;
|
||||
c->velocity[0] = vs; /* comoving with the bubble center */
|
||||
c->velocity[1] = c->velocity[2] = 0.0;
|
||||
c->initial_step = fmin(0.1, 0.05 / sigma);
|
||||
c->max_steps = 100000;
|
||||
c->ref_max_steps = 200000;
|
||||
{
|
||||
const double esc = spacetime_alcubierre_escape_radius(1.0, sigma);
|
||||
c->lookback = 1.25 * 4.0 * esc / (1.0 - fabs(vs));
|
||||
}
|
||||
c->max_step_for_min_scan = c->initial_step * 8.0;
|
||||
{
|
||||
const double d[6][3] = {{1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0},
|
||||
{0.0, 1.0, 0.0}, {0.0, 0.0, 1.0},
|
||||
{0.6, 0.8, 0.0}, {-0.6, 0.8, 0.0}};
|
||||
c->n_dirs = 6;
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
c->theta[i] = NAN;
|
||||
for (int k = 0; k < 3; ++k)
|
||||
c->dirs[i][k] = d[i][k];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Source/observer construction */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
static int build_source(const Case *c, SpacetimeSource *s) {
|
||||
if (c->prov == 0)
|
||||
return spacetime_create_schwarzschild_ks(s, c->mass, c->escape_radius);
|
||||
if (c->prov == 1)
|
||||
return spacetime_create_minkowski(s, c->escape_radius);
|
||||
return spacetime_create_alcubierre(s, c->alc_vs, c->alc_radius,
|
||||
c->alc_sigma);
|
||||
}
|
||||
|
||||
static int build_observer(const Case *c, const SpacetimeSource *s,
|
||||
ObserverState *o) {
|
||||
MetricData m;
|
||||
if (spacetime_eval(s, 0.0, c->position, &m) != SPACETIME_POINT_OK)
|
||||
return -1;
|
||||
ObserverCamera cam;
|
||||
memset(&cam, 0, sizeof cam);
|
||||
cam.coordinate_time = 0.0;
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
cam.position[i] = c->position[i];
|
||||
cam.velocity[i] = c->velocity[i];
|
||||
}
|
||||
cam.look_ra_deg = c->look_ra_deg;
|
||||
cam.look_dec_deg = c->look_dec_deg;
|
||||
cam.roll_deg = 0.0;
|
||||
return observer_from_coordinate_camera(&m, &cam, o, NULL) ==
|
||||
OBSERVER_BUILD_OK
|
||||
? 0
|
||||
: -1;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Generic scan driver */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
static void run_grid(const Case *cases, int ncases, const double *uppers,
|
||||
int n_up, const double *floors, int n_fl, double tol,
|
||||
const char *phase, const char *rows_path,
|
||||
const char *agg_path, Res refs[][MAX_DIRS]) {
|
||||
FILE *rf = fopen(rows_path, "w");
|
||||
FILE *af = fopen(agg_path, "w");
|
||||
if (!rf || !af) {
|
||||
fprintf(stderr, "FATAL: cannot open %s / %s\n", rows_path, agg_path);
|
||||
exit(2);
|
||||
}
|
||||
fprintf(rf, "%s", ROW_HEADER);
|
||||
fprintf(af, "%s", AGG_HEADER);
|
||||
for (int ci = 0; ci < ncases; ++ci) {
|
||||
const Case *c = &cases[ci];
|
||||
SpacetimeSource source;
|
||||
ObserverState observer;
|
||||
if (build_source(c, &source) || build_observer(c, &source, &observer)) {
|
||||
fprintf(stderr, "FATAL: cannot build case %s\n", c->name);
|
||||
exit(2);
|
||||
}
|
||||
for (int ui = 0; ui < n_up; ++ui) {
|
||||
for (int fi = 0; fi < n_fl; ++fi) {
|
||||
Agg agg;
|
||||
agg_init(&agg);
|
||||
for (int di = 0; di < c->n_dirs; ++di) {
|
||||
const GeodesicTraceConfig cfg =
|
||||
make_dp(c->initial_step, floors[fi], uppers[ui], tol, c->max_steps,
|
||||
c->lookback);
|
||||
const Res r = run_ray(&source, &observer, c->dirs[di], &cfg);
|
||||
Cmp cmp;
|
||||
compare(&r, &refs[ci][di], &cmp);
|
||||
write_row(rf, phase, c, di, uppers[ui], floors[fi], tol, &r, &cmp);
|
||||
agg_add(&agg, &r, &cmp);
|
||||
}
|
||||
write_agg(af, phase, c, uppers[ui], floors[fi], tol, &agg);
|
||||
printf("SUMMARY %s %s upper=%.6g min=%.6g n=%ld mismatch=%ld "
|
||||
"max_dn_ang=%.6g max_dgrel=%.6g max_dstopT=%.6g sum_rhs=%lu "
|
||||
"esc=%ld dark=%ld unres=%ld inc=%ld wall=%.3fs\n",
|
||||
phase, c->name, uppers[ui], floors[fi], agg.n,
|
||||
agg.class_mismatch, agg.max_dn_ang, agg.max_dgrel,
|
||||
agg.max_dstopT, agg.sum_rhs, agg.escaped, agg.dark,
|
||||
agg.unresolved, agg.incomplete, agg.sum_wall);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
spacetime_destroy(&source);
|
||||
}
|
||||
fclose(rf);
|
||||
fclose(af);
|
||||
}
|
||||
|
||||
/* Compute DP tol=1e-12 reference for every direction of every case.
|
||||
* upper_ref <= 0 means "use the case's own initial step" as the max_step. */
|
||||
static void compute_refs(const Case *cases, int ncases, double upper_ref,
|
||||
const char *path, Res refs[][MAX_DIRS]) {
|
||||
FILE *f = fopen(path, "w");
|
||||
if (!f) {
|
||||
fprintf(stderr, "FATAL: cannot open %s\n", path);
|
||||
exit(2);
|
||||
}
|
||||
fprintf(f, "%s", ROW_HEADER);
|
||||
for (int ci = 0; ci < ncases; ++ci) {
|
||||
const Case *c = &cases[ci];
|
||||
SpacetimeSource source;
|
||||
ObserverState observer;
|
||||
if (build_source(c, &source) || build_observer(c, &source, &observer)) {
|
||||
fprintf(stderr, "FATAL: cannot build case %s\n", c->name);
|
||||
exit(2);
|
||||
}
|
||||
const double upper = (upper_ref > 0.0) ? upper_ref : c->initial_step;
|
||||
for (int di = 0; di < c->n_dirs; ++di) {
|
||||
const GeodesicTraceConfig cfg = make_dp(c->initial_step, 1e-12, upper,
|
||||
1e-12, c->ref_max_steps,
|
||||
c->lookback);
|
||||
refs[ci][di] = run_ray(&source, &observer, c->dirs[di], &cfg);
|
||||
Cmp none;
|
||||
memset(&none, 0, sizeof none);
|
||||
write_row(f, "ref", c, di, upper, 1e-12, 1e-12, &refs[ci][di], &none);
|
||||
printf("REF %s dir=%d theta=%.6g outcome=%d reason=%d stop_t=%.9g "
|
||||
"steps=%u rejected=%u rhs=%lu g=%.12g thr=%.12g\n",
|
||||
c->name, di, c->theta[di], refs[ci][di].outcome,
|
||||
refs[ci][di].reason, refs[ci][di].stop_t, refs[ci][di].steps,
|
||||
refs[ci][di].rejected, refs[ci][di].rhs, refs[ci][di].g,
|
||||
refs[ci][di].thr);
|
||||
fflush(stdout);
|
||||
}
|
||||
spacetime_destroy(&source);
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Sub-command: Schwarzschild */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
static void cmd_schwarzschild(void) {
|
||||
static Case cases[MAX_CASES];
|
||||
static Res refs[MAX_CASES][MAX_DIRS];
|
||||
memset(refs, 0, sizeof refs);
|
||||
int nc = 0;
|
||||
case_static(&cases[nc++], "r30_inward", 30.0, 180.0);
|
||||
case_static(&cases[nc++], "r100_inward", 100.0, 180.0);
|
||||
case_static(&cases[nc++], "r2p1_outward", 2.1, 0.0);
|
||||
case_freefall(&cases[nc++], "r1p5_freefall", 1.5);
|
||||
|
||||
compute_refs(cases, nc, 0.25, "raw/a_sch_reference.csv", refs);
|
||||
|
||||
static const double uppers[9] = {0.25, 0.5, 1.0, 2.0, 4.0,
|
||||
8.0, 16.0, 32.0, 64.0};
|
||||
static const double floors[10] = {1e-1, 1e-2, 1e-3, 1e-4, 1e-5,
|
||||
1e-6, 1e-8, 1e-10, 1e-12, 1e-14};
|
||||
run_grid(cases, nc, uppers, 9, (double[]){1e-12}, 1, 1e-9, "upper",
|
||||
"raw/a_sch_upper.csv", "raw/a_sch_upper_summary.csv", refs);
|
||||
run_grid(cases, nc, (double[]){2.0}, 1, floors, 10, 1e-9, "min",
|
||||
"raw/a_sch_min.csv", "raw/a_sch_min_summary.csv", refs);
|
||||
|
||||
/* Sensitive-ray RK4 h-halving reference (extra independent check).
|
||||
* (case index, dir index): r30 and r2.1, theta_c +- 1e-5 / +- 1e-7. */
|
||||
const int sens[8][2] = {{0, 8}, {0, 9}, {0, 6}, {0, 7},
|
||||
{2, 8}, {2, 9}, {2, 6}, {2, 7}};
|
||||
FILE *f = fopen("raw/a_sch_rk4_sensitive.csv", "w");
|
||||
if (!f) {
|
||||
fprintf(stderr, "FATAL: cannot open rk4 csv\n");
|
||||
exit(2);
|
||||
}
|
||||
fprintf(f, "%s", ROW_HEADER);
|
||||
for (int k = 0; k < 8; ++k) {
|
||||
const Case *c = &cases[sens[k][0]];
|
||||
const int di = sens[k][1];
|
||||
SpacetimeSource source;
|
||||
ObserverState observer;
|
||||
if (build_source(c, &source) || build_observer(c, &source, &observer)) {
|
||||
fprintf(stderr, "FATAL: cannot build case %s\n", c->name);
|
||||
exit(2);
|
||||
}
|
||||
GeodesicTraceConfig rk01 = make_rk4(0.01, 262144);
|
||||
GeodesicTraceConfig rk005 = make_rk4(0.005, 262144);
|
||||
Res r01 = run_ray(&source, &observer, c->dirs[di], &rk01);
|
||||
Res r005 = run_ray(&source, &observer, c->dirs[di], &rk005);
|
||||
Cmp hh, vsdp;
|
||||
compare(&r005, &r01, &hh);
|
||||
compare(&r005, &refs[sens[k][0]][di], &vsdp);
|
||||
Cmp none;
|
||||
memset(&none, 0, sizeof none);
|
||||
write_row(f, "rk4_0.01", c, di, 0.01, 0.0, 0.0, &r01, &none);
|
||||
write_row(f, "rk4_0.005", c, di, 0.005, 0.0, 0.0, &r005, &none);
|
||||
printf("RK4 %s dir=%d theta=%.6g o01=%d/%d o005=%d/%d "
|
||||
"hhalve_dn=%.6g hhalve_dgrel=%.6g vsdp_dn=%.6g vsdp_dgrel=%.6g "
|
||||
"vsdp_class=%d\n",
|
||||
c->name, di, c->theta[di], r01.outcome, r01.reason, r005.outcome,
|
||||
r005.reason, hh.dn_ang, hh.dgrel, vsdp.dn_ang, vsdp.dgrel,
|
||||
vsdp.class_match);
|
||||
spacetime_destroy(&source);
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Sub-command: Minkowski (analytic flat verification) */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/* Analytic flat past escape from an observer at (t0,x0) with tetrad-frame
|
||||
* direction n: coordinate photon velocity u = k_vec/k^0, crossing radius R at
|
||||
* s = t-t0 < 0, sky direction n_inf = -u, frequency ratio g = 1/k^0. */
|
||||
static int mink_analytic(const Case *c, const ObserverState *o,
|
||||
const double n[3], double R, double *t_cross,
|
||||
double *xc, double *ninf, double *g) {
|
||||
double k[4];
|
||||
for (int mu = 0; mu < 4; ++mu)
|
||||
k[mu] = o->tetrad[0][mu];
|
||||
for (int a = 0; a < 3; ++a)
|
||||
for (int mu = 0; mu < 4; ++mu)
|
||||
k[mu] -= n[a] * o->tetrad[a + 1][mu];
|
||||
if (!(k[0] > 0.0))
|
||||
return -1;
|
||||
double u[3];
|
||||
for (int i = 0; i < 3; ++i)
|
||||
u[i] = k[i + 1] / k[0];
|
||||
const double uu = dot3(u, u);
|
||||
const double B = 2.0 * dot3(c->position, u);
|
||||
const double C = dot3(c->position, c->position) - R * R;
|
||||
const double disc = B * B - 4.0 * uu * C;
|
||||
if (disc < 0.0)
|
||||
return -1;
|
||||
const double sq = sqrt(disc);
|
||||
const double s1 = (-B + sq) / (2.0 * uu);
|
||||
const double s2 = (-B - sq) / (2.0 * uu);
|
||||
const double s = (s1 < 0.0) ? fmin(s1, s2) : s2;
|
||||
if (!(s < 0.0))
|
||||
return -1;
|
||||
*t_cross = o->coordinate_time + s;
|
||||
for (int i = 0; i < 3; ++i)
|
||||
xc[i] = c->position[i] + u[i] * s;
|
||||
const double nu = sqrt(uu);
|
||||
for (int i = 0; i < 3; ++i)
|
||||
ninf[i] = -u[i] / nu;
|
||||
*g = 1.0 / k[0];
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cmd_minkowski(void) {
|
||||
Case c;
|
||||
case_minkowski(&c);
|
||||
static Res refs[MAX_CASES][MAX_DIRS];
|
||||
memset(refs, 0, sizeof refs);
|
||||
SpacetimeSource source;
|
||||
ObserverState observer;
|
||||
if (build_source(&c, &source) || build_observer(&c, &source, &observer)) {
|
||||
fprintf(stderr, "FATAL: cannot build minkowski case\n");
|
||||
exit(2);
|
||||
}
|
||||
|
||||
FILE *mf = fopen("raw/a_mink_analytic.csv", "w");
|
||||
if (!mf) {
|
||||
fprintf(stderr, "FATAL: cannot open analytic csv\n");
|
||||
exit(2);
|
||||
}
|
||||
fprintf(mf,
|
||||
"case,dir,upper,min_step,tol,outcome,stop_t,x_err,t_err,dn_ang,"
|
||||
"dgrel,g_analytic,stop_t_analytic\n");
|
||||
|
||||
/* Reference: tol=1e-12, max_step = initial (1.0). */
|
||||
const GeodesicTraceConfig refcfg =
|
||||
make_dp(c.initial_step, 1e-12, c.initial_step, 1e-12, c.max_steps,
|
||||
c.lookback);
|
||||
for (int di = 0; di < c.n_dirs; ++di)
|
||||
refs[0][di] = run_ray(&source, &observer, c.dirs[di], &refcfg);
|
||||
|
||||
static const double uppers[5] = {1.0, 4.0, 16.0, 64.0, 256.0};
|
||||
static const double floors[3] = {1e-1, 1e-6, 1e-12};
|
||||
for (int ui = 0; ui < 5; ++ui) {
|
||||
for (int fi = 0; fi < 3; ++fi) {
|
||||
Agg agg;
|
||||
agg_init(&agg);
|
||||
for (int di = 0; di < c.n_dirs; ++di) {
|
||||
const GeodesicTraceConfig cfg =
|
||||
make_dp(c.initial_step, floors[fi], uppers[ui], 1e-9, c.max_steps,
|
||||
c.lookback);
|
||||
const Res r = run_ray(&source, &observer, c.dirs[di], &cfg);
|
||||
Cmp cmp;
|
||||
compare(&r, &refs[0][di], &cmp);
|
||||
agg_add(&agg, &r, &cmp);
|
||||
double t_an, x_an[3], n_an[3], g_an;
|
||||
const int ok = mink_analytic(&c, &observer, c.dirs[di], c.escape_radius,
|
||||
&t_an, x_an, n_an, &g_an);
|
||||
double x_err = NAN, t_err = NAN, dn_an = NAN, dg_an = NAN;
|
||||
if (ok == 0 && is_escaped(r.outcome)) {
|
||||
/* Crossing position is checked through the direct trace in
|
||||
* a_mink_analytic_x.csv; here compare sky direction, g and time. */
|
||||
t_err = fabs(r.stop_t - t_an);
|
||||
dn_an = ang_delta(r.n, n_an);
|
||||
if (r.g > 0.0 && g_an > 0.0)
|
||||
dg_an = fabs(r.g / g_an - 1.0);
|
||||
}
|
||||
fprintf(mf,
|
||||
"%s,%d,%.6g,%.6g,%.6g,%d,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,"
|
||||
"%.17g\n",
|
||||
c.name, di, uppers[ui], floors[fi], 1e-9, r.outcome, r.stop_t,
|
||||
x_err, t_err, dn_an, dg_an, g_an, t_an);
|
||||
}
|
||||
printf("SUMMARY mink upper=%.6g min=%.6g n=%ld mismatch=%ld "
|
||||
"max_dn_ang=%.6g max_dgrel=%.6g sum_rhs=%lu esc=%ld dark=%ld "
|
||||
"unres=%ld inc=%ld\n",
|
||||
uppers[ui], floors[fi], agg.n, agg.class_mismatch,
|
||||
agg.max_dn_ang, agg.max_dgrel, agg.sum_rhs, agg.escaped, agg.dark,
|
||||
agg.unresolved, agg.incomplete);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
/* Direct endpoint check for the crossing position (x) on a few configs. */
|
||||
FILE *xf = fopen("raw/a_mink_analytic_x.csv", "w");
|
||||
if (!xf) {
|
||||
fprintf(stderr, "FATAL: cannot open analytic x csv\n");
|
||||
exit(2);
|
||||
}
|
||||
fprintf(xf, "case,dir,upper,min_step,tol,outcome,x_err_x,x_err_y,x_err_z,"
|
||||
"t_err\n");
|
||||
for (int ui = 0; ui < 5; ++ui) {
|
||||
for (int fi = 0; fi < 3; ++fi) {
|
||||
for (int di = 0; di < c.n_dirs; ++di) {
|
||||
const GeodesicTraceConfig cfg =
|
||||
make_dp(c.initial_step, floors[fi], uppers[ui], 1e-9, c.max_steps,
|
||||
c.lookback);
|
||||
const RayEndpoint e =
|
||||
geodesic_trace_past(&source, &observer, c.dirs[di], &cfg);
|
||||
++g_rays;
|
||||
double t_an, x_an[3], n_an[3], g_an;
|
||||
const int ok = mink_analytic(&c, &observer, c.dirs[di], c.escape_radius,
|
||||
&t_an, x_an, n_an, &g_an);
|
||||
double ex = NAN, ey = NAN, ez = NAN, te = NAN;
|
||||
if (ok == 0 && e.outcome == RAY_OUTCOME_ESCAPED) {
|
||||
ex = fabs(e.final_x[0] - x_an[0]);
|
||||
ey = fabs(e.final_x[1] - x_an[1]);
|
||||
ez = fabs(e.final_x[2] - x_an[2]);
|
||||
te = fabs(e.stop_coordinate_time - t_an);
|
||||
}
|
||||
fprintf(xf, "%s,%d,%.6g,%.6g,%.6g,%d,%.17g,%.17g,%.17g,%.17g\n",
|
||||
c.name, di, uppers[ui], floors[fi], 1e-9, e.outcome, ex, ey, ez,
|
||||
te);
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(xf);
|
||||
fclose(mf);
|
||||
spacetime_destroy(&source);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Sub-command: Alcubierre */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
static void cmd_alcubierre(void) {
|
||||
static Case cases[MAX_CASES];
|
||||
static Res refs[MAX_CASES][MAX_DIRS];
|
||||
memset(refs, 0, sizeof refs);
|
||||
int nc = 0;
|
||||
case_alcubierre(&cases[nc++], "alc_v3_s1", 0.3, 1.0);
|
||||
case_alcubierre(&cases[nc++], "alc_v3_s10", 0.3, 10.0);
|
||||
case_alcubierre(&cases[nc++], "alc_v9_s1", 0.9, 1.0);
|
||||
case_alcubierre(&cases[nc++], "alc_v9_s10", 0.9, 10.0);
|
||||
case_alcubierre(&cases[nc++], "alc_v9_s100", 0.9, 100.0);
|
||||
|
||||
compute_refs(cases, nc, -1.0, "raw/a_alc_reference.csv", refs);
|
||||
|
||||
/* Standard grid: upper = initial*{1,4,8,16,32,64}, floor {1e-4,1e-8,1e-12}. */
|
||||
{
|
||||
static const double floors[3] = {1e-4, 1e-8, 1e-12};
|
||||
Case sub[4];
|
||||
for (int i = 0; i < 4; ++i)
|
||||
sub[i] = cases[i];
|
||||
/* run_grid uses one upper array for all cases, so use per-case initial by
|
||||
* calling run_grid four times. */
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
char rp[128], ap[128];
|
||||
snprintf(rp, sizeof rp, "raw/a_alc_%.31s_upper.csv", sub[i].name);
|
||||
snprintf(ap, sizeof ap, "raw/a_alc_%.31s_upper_summary.csv", sub[i].name);
|
||||
const double base = sub[i].initial_step;
|
||||
const double up[6] = {base, 4 * base, 8 * base,
|
||||
16 * base, 32 * base, 64 * base};
|
||||
run_grid(&sub[i], 1, up, 6, floors, 3, 1e-9, "upper", rp, ap, &refs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Focused lower-bound stress: vs=.9, sigma=100, upper = initial*8 = 0.004,
|
||||
* floors {1e-4,1e-5,1e-6,1e-8,1e-12,1e-14}. */
|
||||
{
|
||||
const Case *c = &cases[4];
|
||||
const double up[1] = {c->initial_step * 8.0};
|
||||
const double floors[6] = {1e-4, 1e-5, 1e-6, 1e-8, 1e-12, 1e-14};
|
||||
run_grid(c, 1, up, 1, floors, 6, 1e-9, "min_stress",
|
||||
"raw/a_alc_v9_s100_min.csv", "raw/a_alc_v9_s100_min_summary.csv",
|
||||
&refs[4]);
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc < 2) {
|
||||
fprintf(stderr,
|
||||
"usage: %s schwarzschild|minkowski|alcubierre\n",
|
||||
argv[0]);
|
||||
return 1;
|
||||
}
|
||||
if (!strcmp(argv[1], "schwarzschild"))
|
||||
cmd_schwarzschild();
|
||||
else if (!strcmp(argv[1], "minkowski"))
|
||||
cmd_minkowski();
|
||||
else if (!strcmp(argv[1], "alcubierre"))
|
||||
cmd_alcubierre();
|
||||
else {
|
||||
fprintf(stderr, "unknown sub-command %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
printf("TOTAL_RAYS %ld\n", g_rays);
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,404 @@
|
||||
/*
|
||||
* Experiment B: observed accepted-step sizes of the production DP54 core.
|
||||
*
|
||||
* This translation unit textually includes src/geodesic.c so the real,
|
||||
* production `dp_advance_one` driver and the real `State` (GeodesicRayState)
|
||||
* are exercised directly on a finite trajectory interval. The production
|
||||
* initialization is reproduced exactly as `geodesic_trace_past` does for an
|
||||
* INSIDE route: `geodesic_initialize_past_ray_metric` at the camera event,
|
||||
* then `next_step = config->coordinate_time_step` (the init already sets
|
||||
* `integration_start_time`, `log_alpha_p0` and `log_alpha_p0_0`). This is the
|
||||
* same initialization the public endpoint uses, not a re-implementation.
|
||||
*
|
||||
* For each selected ray we:
|
||||
* 1. run the public endpoint with tol=1e-12 to get a trusted reference
|
||||
* stop time and terminal class (physical terminal class is owned by A);
|
||||
* 2. integrate the same ray with the production DP core up to
|
||||
* T = min(20, ref_span) observed steps <= 2000, recording each accepted
|
||||
* step magnitude, boundary-limit flag, rejection/RHS deltas and the null
|
||||
* residual gamma^{ij} Pi_i Pi_j - 1.
|
||||
*
|
||||
* Link line (geodesic.c is textually included, so it is NOT linked; the
|
||||
* analytic backends are also textually included here):
|
||||
* cc -std=c11 -O2 -Isrc b_actual_h.c asymptotic.c asymptotic_schwarzschild.c \
|
||||
* spacetime_common.c observer.c -lm
|
||||
*/
|
||||
#define _POSIX_C_SOURCE 200809L
|
||||
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#define spacetime_create_default spacetime_create_default_minkowski_b
|
||||
#include "../../src/spacetime_minkowski.c"
|
||||
#undef spacetime_create_default
|
||||
#define spacetime_create_default spacetime_create_default_schwarzschild_b
|
||||
#include "../../src/spacetime_schwarzschild.c"
|
||||
#undef spacetime_create_default
|
||||
#define spacetime_create_default spacetime_create_default_alcubierre_b
|
||||
#include "../../src/spacetime_alcubierre.c"
|
||||
#undef spacetime_create_default
|
||||
|
||||
/* The production geodesic core, textually included. Its static State,
|
||||
* dp_advance_one and invert become visible to the code below. */
|
||||
#include "../../src/geodesic.c"
|
||||
|
||||
#define PI 3.14159265358979323846
|
||||
#define MAX_BCASES 12
|
||||
#define MAX_BDIRS 8
|
||||
#define MAX_OBS_STEPS 2000
|
||||
|
||||
typedef struct {
|
||||
char name[32];
|
||||
int prov; /* 0 sch, 1 mink, 2 alc */
|
||||
double mass, esc;
|
||||
double vs, radius, sigma;
|
||||
double look_ra_deg, look_dec_deg;
|
||||
double pos[3], vel[3];
|
||||
double initial, max_step;
|
||||
double ref_max_step, lookback;
|
||||
unsigned int ref_max_steps;
|
||||
int ndirs;
|
||||
double dirs[MAX_BDIRS][3];
|
||||
} BCase;
|
||||
|
||||
static double b_now(void) {
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
return (double)ts.tv_sec + 1e-9 * (double)ts.tv_nsec;
|
||||
}
|
||||
|
||||
static void b_dir(double th, double n[3]) {
|
||||
if (th == 0.0) {
|
||||
n[0] = 1.0;
|
||||
n[1] = n[2] = 0.0;
|
||||
} else if (th == PI) {
|
||||
n[0] = -1.0;
|
||||
n[1] = n[2] = 0.0;
|
||||
} else {
|
||||
n[0] = cos(th);
|
||||
n[1] = sin(th);
|
||||
n[2] = 0.0;
|
||||
}
|
||||
const double nn = sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);
|
||||
for (int i = 0; i < 3; ++i)
|
||||
n[i] /= nn;
|
||||
}
|
||||
|
||||
static double b_critical_angle(double r) {
|
||||
const double b = 3.0 * sqrt(3.0) * sqrt(1.0 - 2.0 / r) / r;
|
||||
return (b < 1.0) ? asin(b) : PI / 2.0;
|
||||
}
|
||||
|
||||
static GeodesicTraceConfig b_make_dp(double initial, double min_step,
|
||||
double max_step, double tol,
|
||||
unsigned int max_steps, double lookback) {
|
||||
GeodesicTraceConfig c;
|
||||
memset(&c, 0, sizeof c);
|
||||
c.coordinate_time_step = initial;
|
||||
c.max_steps = max_steps;
|
||||
c.threshold.kind = THRESHOLD_LOG_ENERGY_GROWTH;
|
||||
c.threshold.value = 8.0;
|
||||
c.threshold.policy_version = 3;
|
||||
c.stepper = GEODESIC_STEPPER_DP54;
|
||||
c.atol_x = c.atol_Pi = c.atol_L = c.rtol = tol;
|
||||
c.min_step = min_step;
|
||||
c.max_step = max_step;
|
||||
c.consecutive_rejection_limit = 32;
|
||||
c.max_lookback_time = lookback;
|
||||
return c;
|
||||
}
|
||||
|
||||
static int b_build_source(const BCase *c, SpacetimeSource *s) {
|
||||
if (c->prov == 0)
|
||||
return spacetime_create_schwarzschild_ks(s, c->mass, c->esc);
|
||||
if (c->prov == 1)
|
||||
return spacetime_create_minkowski(s, c->esc);
|
||||
return spacetime_create_alcubierre(s, c->vs, c->radius, c->sigma);
|
||||
}
|
||||
|
||||
static int b_build_observer(const BCase *c, const SpacetimeSource *s,
|
||||
ObserverState *o) {
|
||||
MetricData m;
|
||||
if (spacetime_eval(s, 0.0, c->pos, &m) != SPACETIME_POINT_OK)
|
||||
return -1;
|
||||
ObserverCamera cam;
|
||||
memset(&cam, 0, sizeof cam);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
cam.position[i] = c->pos[i];
|
||||
cam.velocity[i] = c->vel[i];
|
||||
}
|
||||
cam.look_ra_deg = c->look_ra_deg;
|
||||
cam.look_dec_deg = c->look_dec_deg;
|
||||
return observer_from_coordinate_camera(&m, &cam, o, NULL) ==
|
||||
OBSERVER_BUILD_OK
|
||||
? 0
|
||||
: -1;
|
||||
}
|
||||
|
||||
static void b_add_sch(BCase *c, const char *name, double r, double look,
|
||||
const double *thetas, int nt) {
|
||||
memset(c, 0, sizeof *c);
|
||||
snprintf(c->name, sizeof c->name, "%s", name);
|
||||
c->prov = 0;
|
||||
c->mass = 1.0;
|
||||
c->esc = 256.0;
|
||||
c->look_ra_deg = look;
|
||||
c->pos[0] = r;
|
||||
c->initial = 0.1;
|
||||
c->max_step = 2.0;
|
||||
c->ref_max_step = 0.25;
|
||||
c->lookback = 6553.6;
|
||||
c->ref_max_steps = 65536;
|
||||
c->ndirs = nt;
|
||||
for (int i = 0; i < nt; ++i)
|
||||
b_dir(thetas[i], c->dirs[i]);
|
||||
}
|
||||
|
||||
static void b_add_mink(BCase *c) {
|
||||
memset(c, 0, sizeof *c);
|
||||
snprintf(c->name, sizeof c->name, "mink_moving");
|
||||
c->prov = 1;
|
||||
c->esc = 64.0;
|
||||
c->look_ra_deg = 0.0;
|
||||
c->pos[0] = 10.0;
|
||||
c->pos[1] = 20.0;
|
||||
c->pos[2] = -15.0;
|
||||
c->vel[0] = 0.3;
|
||||
c->vel[1] = 0.2;
|
||||
c->vel[2] = 0.1;
|
||||
c->initial = 1.0;
|
||||
c->max_step = 16.0;
|
||||
c->ref_max_step = 1.0;
|
||||
c->lookback = 2048.0;
|
||||
c->ref_max_steps = 4096;
|
||||
c->ndirs = 2;
|
||||
b_dir(0.0, c->dirs[0]);
|
||||
b_dir(PI, c->dirs[1]);
|
||||
}
|
||||
|
||||
static void b_add_alc(BCase *c, const char *name, double vs, double sigma,
|
||||
const double *thetas, int nt) {
|
||||
memset(c, 0, sizeof *c);
|
||||
snprintf(c->name, sizeof c->name, "%s", name);
|
||||
c->prov = 2;
|
||||
c->vs = vs;
|
||||
c->radius = 1.0;
|
||||
c->sigma = sigma;
|
||||
c->look_ra_deg = 0.0;
|
||||
c->vel[0] = vs;
|
||||
c->initial = fmin(0.1, 0.05 / sigma);
|
||||
c->max_step = c->initial * 8.0;
|
||||
c->ref_max_step = c->initial;
|
||||
const double esc = spacetime_alcubierre_escape_radius(1.0, sigma);
|
||||
c->lookback = 1.25 * 4.0 * esc / (1.0 - fabs(vs));
|
||||
c->ref_max_steps = 200000;
|
||||
c->ndirs = nt;
|
||||
for (int i = 0; i < nt; ++i)
|
||||
b_dir(thetas[i], c->dirs[i]);
|
||||
}
|
||||
|
||||
/* gamma^{ij} Pi_i Pi_j - 1; `invert` is the production static from
|
||||
* geodesic.c, so this is the exact production metric contraction. */
|
||||
static double b_null_residual(const MetricData *m, const double Pi[3]) {
|
||||
double g[3][3], inv[3][3];
|
||||
for (int i = 0; i < 3; ++i)
|
||||
for (int j = 0; j < 3; ++j)
|
||||
g[i][j] = m->gamma[i][j];
|
||||
if (invert(g, inv))
|
||||
return NAN;
|
||||
double v = 0.0;
|
||||
for (int i = 0; i < 3; ++i)
|
||||
for (int j = 0; j < 3; ++j)
|
||||
v += inv[i][j] * Pi[i] * Pi[j];
|
||||
return v - 1.0;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
static BCase cases[MAX_BCASES];
|
||||
int nc = 0;
|
||||
|
||||
{
|
||||
const double tc = b_critical_angle(30.0);
|
||||
const double th[6] = {0.0, PI, tc - 1e-7, tc + 1e-7, tc - 1e-5, tc + 1e-5};
|
||||
b_add_sch(&cases[nc++], "r30_inward", 30.0, 180.0, th, 6);
|
||||
}
|
||||
{
|
||||
const double tc = b_critical_angle(100.0);
|
||||
const double th[4] = {0.0, PI, tc, tc - 1e-7};
|
||||
b_add_sch(&cases[nc++], "r100_inward", 100.0, 180.0, th, 4);
|
||||
}
|
||||
{
|
||||
const double tc = b_critical_angle(2.1);
|
||||
const double th[5] = {0.0, tc, tc - 1e-7, tc + 1e-7, PI};
|
||||
b_add_sch(&cases[nc++], "r2p1_outward", 2.1, 0.0, th, 5);
|
||||
}
|
||||
{
|
||||
const double th[2] = {0.0, PI};
|
||||
b_add_sch(&cases[nc++], "r1p5_freefall", 1.5, 180.0, th, 2);
|
||||
/* free-fall velocity is set below (b_add_sch leaves it zero). */
|
||||
}
|
||||
b_add_mink(&cases[nc++]);
|
||||
{
|
||||
const double th[2] = {0.0, PI};
|
||||
b_add_alc(&cases[nc++], "alc_v3_s1", 0.3, 1.0, th, 2);
|
||||
b_add_alc(&cases[nc++], "alc_v9_s10", 0.9, 10.0, th, 2);
|
||||
b_add_alc(&cases[nc++], "alc_v9_s100", 0.9, 100.0, th, 2);
|
||||
}
|
||||
/* Free-fall coordinate velocity for r1.5 (same formula as A). */
|
||||
{
|
||||
BCase *c = &cases[3];
|
||||
const double y = sqrt(2.0 / c->pos[0]);
|
||||
c->vel[0] = -y * (1.0 + y) / (1.0 + y + y * y);
|
||||
}
|
||||
|
||||
FILE *hf = fopen("raw/b_actual_h.csv", "w");
|
||||
FILE *sf = fopen("raw/b_summary.csv", "w");
|
||||
if (!hf || !sf) {
|
||||
fprintf(stderr, "FATAL: cannot open b csv\n");
|
||||
return 2;
|
||||
}
|
||||
fprintf(hf, "case,dir,step,t,h,boundary_limited,rhs_delta,reject_delta,"
|
||||
"null_residual\n");
|
||||
fprintf(sf, "case,dir,ref_outcome,ref_stop_t,span,target,observed_steps,"
|
||||
"reached_target,terminated_reason,h_min,h_max,h_first,h_last,"
|
||||
"boundary_steps,sum_rhs,sum_reject,max_reject_delta,"
|
||||
"null_residual_max,final_t,wall_s\n");
|
||||
|
||||
long total_steps = 0;
|
||||
for (int ci = 0; ci < nc; ++ci) {
|
||||
BCase *c = &cases[ci];
|
||||
SpacetimeSource source;
|
||||
ObserverState observer;
|
||||
if (b_build_source(c, &source) || b_build_observer(c, &source, &observer)) {
|
||||
fprintf(stderr, "FATAL: cannot build B case %s\n", c->name);
|
||||
return 2;
|
||||
}
|
||||
for (int di = 0; di < c->ndirs; ++di) {
|
||||
/* 1. trusted reference via the public endpoint (physical terminal). */
|
||||
GeodesicTraceConfig refcfg =
|
||||
b_make_dp(c->initial, 1e-12, c->ref_max_step, 1e-12, c->ref_max_steps,
|
||||
c->lookback);
|
||||
RayEndpoint ref =
|
||||
geodesic_trace_past(&source, &observer, c->dirs[di], &refcfg);
|
||||
const double span =
|
||||
isfinite(ref.stop_coordinate_time)
|
||||
? (observer.coordinate_time - ref.stop_coordinate_time)
|
||||
: 20.0;
|
||||
const double finite_T = fmin(20.0, span > 0.0 ? span : 20.0);
|
||||
const double target = observer.coordinate_time - finite_T;
|
||||
|
||||
/* 2. production-exact INSIDE-route initialization. */
|
||||
MetricData metric;
|
||||
if (spacetime_eval(&source, observer.coordinate_time,
|
||||
observer.coordinate_position, &metric) !=
|
||||
SPACETIME_POINT_OK) {
|
||||
fprintf(stderr, "FATAL: camera metric %s\n", c->name);
|
||||
return 2;
|
||||
}
|
||||
State st;
|
||||
if (geodesic_initialize_past_ray_metric(&metric, &observer, c->dirs[di],
|
||||
&st)) {
|
||||
fprintf(stderr, "FATAL: init %s dir %d\n", c->name, di);
|
||||
return 2;
|
||||
}
|
||||
GeodesicTraceConfig cfg =
|
||||
b_make_dp(c->initial, 1e-12, c->max_step, 1e-9, 0u, 0.0);
|
||||
st.next_step = cfg.coordinate_time_step;
|
||||
|
||||
MetricSlab *slab = NULL;
|
||||
if (spacetime_load_slab(&source, st.coordinate_time, target - 1.0,
|
||||
&slab)) {
|
||||
fprintf(stderr, "FATAL: slab %s dir %d\n", c->name, di);
|
||||
return 2;
|
||||
}
|
||||
|
||||
double h_min = INFINITY, h_max = 0.0, h_first = NAN, h_last = NAN;
|
||||
double null_max = 0.0, sum_wall = 0.0;
|
||||
unsigned long sum_rhs = 0;
|
||||
unsigned int sum_rej = 0, max_rej_delta = 0, boundary_steps = 0;
|
||||
int reached = 0, terminated_reason = -1;
|
||||
int step_index = 0;
|
||||
const double start_wall = b_now();
|
||||
while (st.coordinate_time > target && step_index < MAX_OBS_STEPS) {
|
||||
const double before_t = st.coordinate_time;
|
||||
unsigned long rhs = st.rhs_evaluations;
|
||||
unsigned int rej = st.rejected_steps;
|
||||
RayReason reason = RAY_REASON_INTEGRATION_ERROR;
|
||||
const int rc =
|
||||
dp_advance_one(slab, &cfg, &st, target, &reason, &rhs, &rej, NULL);
|
||||
const unsigned long rhs_delta = rhs - st.rhs_evaluations;
|
||||
const unsigned int rej_delta = rej - st.rejected_steps;
|
||||
st.rhs_evaluations = rhs;
|
||||
st.rejected_steps = rej;
|
||||
sum_rhs += rhs_delta;
|
||||
sum_rej += rej_delta;
|
||||
if (rej_delta > max_rej_delta)
|
||||
max_rej_delta = rej_delta;
|
||||
if (rc) {
|
||||
terminated_reason = (int)reason;
|
||||
break;
|
||||
}
|
||||
const double h = before_t - st.coordinate_time;
|
||||
const int boundary = (st.coordinate_time == target);
|
||||
if (boundary)
|
||||
++boundary_steps;
|
||||
if (h < h_min)
|
||||
h_min = h;
|
||||
if (h > h_max)
|
||||
h_max = h;
|
||||
if (step_index == 0)
|
||||
h_first = h;
|
||||
h_last = h;
|
||||
++step_index;
|
||||
MetricData m;
|
||||
double nr = NAN;
|
||||
if (spacetime_slab_eval(slab, st.coordinate_time, st.x, &m) ==
|
||||
SPACETIME_POINT_OK)
|
||||
nr = b_null_residual(&m, st.Pi);
|
||||
if (isfinite(nr) && fabs(nr) > null_max)
|
||||
null_max = fabs(nr);
|
||||
fprintf(hf, "%s,%d,%d,%.17g,%.17g,%d,%lu,%u,%.6g\n", c->name, di,
|
||||
step_index, st.coordinate_time, h, boundary, rhs_delta,
|
||||
rej_delta, nr);
|
||||
if (st.coordinate_time <= target)
|
||||
reached = 1;
|
||||
}
|
||||
sum_wall = b_now() - start_wall;
|
||||
if (step_index >= MAX_OBS_STEPS)
|
||||
reached = 0;
|
||||
if (!isfinite(h_first)) {
|
||||
h_first = NAN;
|
||||
h_max = NAN;
|
||||
}
|
||||
if (!isfinite(h_min) || h_min == INFINITY)
|
||||
h_min = NAN;
|
||||
if (h_last < 0.0)
|
||||
h_last = NAN;
|
||||
fprintf(sf,
|
||||
"%s,%d,%d,%.17g,%.17g,%.17g,%d,%d,%d,%.17g,%.17g,%.17g,%.17g,"
|
||||
"%u,%lu,%u,%u,%.6g,%.17g,%.6g\n",
|
||||
c->name, di, ref.outcome, ref.stop_coordinate_time, span, target,
|
||||
step_index, reached, terminated_reason, h_min, h_max, h_first,
|
||||
h_last, boundary_steps, sum_rhs, sum_rej, max_rej_delta, null_max,
|
||||
st.coordinate_time, sum_wall);
|
||||
printf("B %s dir=%d ref=%d refstop=%.9g span=%.6g T=%.6g target=%.6g "
|
||||
"steps=%d reached=%d term=%d h=[%.6g,%.6g] first=%.6g last=%.6g "
|
||||
"boundary=%u rhs=%lu rej=%u nullmax=%.3g final_t=%.9g wall=%.4fs\n",
|
||||
c->name, di, ref.outcome, ref.stop_coordinate_time, span, finite_T,
|
||||
target, step_index, reached, terminated_reason, h_min, h_max,
|
||||
h_first, h_last, boundary_steps, sum_rhs, sum_rej, null_max,
|
||||
st.coordinate_time, sum_wall);
|
||||
fflush(stdout);
|
||||
total_steps += step_index;
|
||||
spacetime_free_slab(slab);
|
||||
}
|
||||
spacetime_destroy(&source);
|
||||
}
|
||||
fclose(hf);
|
||||
fclose(sf);
|
||||
printf("TOTAL_OBSERVED_STEPS %ld\n", total_steps);
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,341 @@
|
||||
/*
|
||||
* Standalone critical-classification reference check.
|
||||
*
|
||||
* Three static Schwarzschild cameras (M=1, escape sphere 256):
|
||||
* r30 look 180 (inward), r100 look 180 (inward), r2.1 look 0 (outward),
|
||||
* each aimed at theta_crit exactly and at theta_crit +- 1e-7, where
|
||||
* theta_crit = asin(3 sqrt(3) sqrt(1 - 2/r) / r)
|
||||
* is the local tetrad angle from the camera forward direction.
|
||||
*
|
||||
* For every direction four DP54 configs are run (initial step 0.1,
|
||||
* min_step 1e-14, max_steps 65536, max_lookback_time 6553.6, reject limit 32,
|
||||
* camera-relative dark threshold 8):
|
||||
*
|
||||
* ref_tol1e-12_h0.25 tol 1e-12, max_step 0.25
|
||||
* ref_tol1e-13_h0.125 tol 1e-13, max_step 0.125
|
||||
* tol1e-11_h2 tol 1e-11, max_step 2
|
||||
* tol1e-11_h8 tol 1e-11, max_step 8
|
||||
*
|
||||
* Total 3 cameras * 3 directions * 4 configs = 36 endpoint traces.
|
||||
*
|
||||
* Raw per-run rows go to raw/critical_ref.csv; stdout prints, for all nine
|
||||
* directions, ref_vs_tighter / h2_vs_h8 / ref_vs_h2 / ref_vs_h8 comparisons
|
||||
* (outcome/reason/end, sky angle, relative g, dark stop-time and threshold
|
||||
* shifts) and a NEIGHBOR_REFERENCE_CHECK that verifies the two reference
|
||||
* tiers agree at the +-1e-7 neighbours. The exactly-critical direction is a
|
||||
* separatrix: a class flip or a large direction/stop-time difference there is
|
||||
* reported as EXACT_CRITICAL_REFERENCE_NOT_CONVERGED and is diagnostic only.
|
||||
*
|
||||
* Exit status: 0 when the neighbours' reference tiers agree and no neighbour
|
||||
* returned an error/unresolved endpoint or a zero-step trace; 1 when a
|
||||
* neighbour reference check fails; 2 on setup error. The exact-critical
|
||||
* separatrix is never an assertion.
|
||||
*
|
||||
* Link line (the Schwarzschild backend is textually included):
|
||||
* cc -std=c11 -O2 -Isrc critical_ref_check.c geodesic.c asymptotic.c \
|
||||
* asymptotic_schwarzschild.c spacetime_common.c observer.c -lm
|
||||
*/
|
||||
#define _POSIX_C_SOURCE 200809L
|
||||
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "../../src/spacetime_schwarzschild.c"
|
||||
|
||||
#include "geodesic.h"
|
||||
#include "observer.h"
|
||||
#include "spacetime.h"
|
||||
|
||||
#define PI 3.14159265358979323846
|
||||
|
||||
typedef struct {
|
||||
const char *name;
|
||||
double tol;
|
||||
double max_step;
|
||||
} CfgDef;
|
||||
|
||||
static const CfgDef cfgs[4] = {
|
||||
{"ref_tol1e-12_h0.25", 1e-12, 0.25},
|
||||
{"ref_tol1e-13_h0.125", 1e-13, 0.125},
|
||||
{"tol1e-11_h2", 1e-11, 2.0},
|
||||
{"tol1e-11_h8", 1e-11, 8.0},
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
const char *name;
|
||||
double r;
|
||||
double look_ra_deg;
|
||||
} CamDef;
|
||||
|
||||
static const CamDef cams[3] = {
|
||||
{"r30_inward", 30.0, 180.0},
|
||||
{"r100_inward", 100.0, 180.0},
|
||||
{"r2p1_outward", 2.1, 0.0},
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
int outcome, reason;
|
||||
unsigned int end_id;
|
||||
double stop_t, g, thr;
|
||||
double L, L0;
|
||||
double n[3];
|
||||
unsigned int steps, rejected;
|
||||
unsigned long rhs;
|
||||
} Res;
|
||||
|
||||
static double b_dot3(const double a[3], const double b[3]) {
|
||||
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
||||
}
|
||||
|
||||
static double b_ang_delta(const double a[3], const double b[3]) {
|
||||
const double na = sqrt(b_dot3(a, a)), nb = sqrt(b_dot3(b, b));
|
||||
if (!(na > 0.0) || !(nb > 0.0))
|
||||
return NAN;
|
||||
const double cross[3] = {a[1] * b[2] - a[2] * b[1],
|
||||
a[2] * b[0] - a[0] * b[2],
|
||||
a[0] * b[1] - a[1] * b[0]};
|
||||
return atan2(sqrt(b_dot3(cross, cross)) / (na * nb),
|
||||
b_dot3(a, b) / (na * nb));
|
||||
}
|
||||
|
||||
static double critical_angle(double r) {
|
||||
const double b = 3.0 * sqrt(3.0) * sqrt(1.0 - 2.0 / r) / r;
|
||||
return (b < 1.0) ? asin(b) : PI / 2.0;
|
||||
}
|
||||
|
||||
static void dir_from_theta(double th, double n[3]) {
|
||||
n[0] = cos(th);
|
||||
n[1] = sin(th);
|
||||
n[2] = 0.0;
|
||||
const double nn = sqrt(b_dot3(n, n));
|
||||
for (int i = 0; i < 3; ++i)
|
||||
n[i] /= nn;
|
||||
}
|
||||
|
||||
static GeodesicTraceConfig make_cfg(const CfgDef *d) {
|
||||
GeodesicTraceConfig c;
|
||||
memset(&c, 0, sizeof c);
|
||||
c.coordinate_time_step = 0.1;
|
||||
c.max_steps = 65536;
|
||||
c.threshold.kind = THRESHOLD_LOG_ENERGY_GROWTH;
|
||||
c.threshold.value = 8.0;
|
||||
c.threshold.policy_version = 3;
|
||||
c.stepper = GEODESIC_STEPPER_DP54;
|
||||
c.atol_x = c.atol_Pi = c.atol_L = c.rtol = d->tol;
|
||||
c.min_step = 1e-14;
|
||||
c.max_step = d->max_step;
|
||||
c.consecutive_rejection_limit = 32;
|
||||
c.max_lookback_time = 6553.6;
|
||||
return c;
|
||||
}
|
||||
|
||||
static int build_observer(const CamDef *cam, const SpacetimeSource *s,
|
||||
ObserverState *o) {
|
||||
const double pos[3] = {cam->r, 0.0, 0.0};
|
||||
MetricData m;
|
||||
if (spacetime_eval(s, 0.0, pos, &m) != SPACETIME_POINT_OK)
|
||||
return -1;
|
||||
ObserverCamera camera;
|
||||
memset(&camera, 0, sizeof camera);
|
||||
camera.position[0] = pos[0];
|
||||
camera.position[1] = pos[1];
|
||||
camera.position[2] = pos[2];
|
||||
camera.look_ra_deg = cam->look_ra_deg;
|
||||
camera.look_dec_deg = 0.0;
|
||||
return observer_from_coordinate_camera(&m, &camera, o, NULL) ==
|
||||
OBSERVER_BUILD_OK
|
||||
? 0
|
||||
: -1;
|
||||
}
|
||||
|
||||
static Res run_one(const SpacetimeSource *s, const ObserverState *o,
|
||||
const double dir[3], const GeodesicTraceConfig *cfg) {
|
||||
Res r;
|
||||
memset(&r, 0, sizeof r);
|
||||
const RayEndpoint e = geodesic_trace_past(s, o, dir, cfg);
|
||||
r.outcome = e.outcome;
|
||||
r.reason = e.reason;
|
||||
r.end_id = e.end_id;
|
||||
r.stop_t = e.stop_coordinate_time;
|
||||
r.g = e.frequency_ratio;
|
||||
r.thr = e.threshold_value;
|
||||
r.L = e.final_log_alpha_p0;
|
||||
r.L0 = e.final_log_alpha_p0_0;
|
||||
for (int i = 0; i < 3; ++i)
|
||||
r.n[i] = e.n_infinity[i];
|
||||
r.steps = e.accepted_steps;
|
||||
r.rejected = e.rejected_steps;
|
||||
r.rhs = e.rhs_evaluations;
|
||||
return r;
|
||||
}
|
||||
|
||||
static const char *outcome_name(int o) {
|
||||
switch (o) {
|
||||
case RAY_OUTCOME_ESCAPED:
|
||||
return "ESC";
|
||||
case RAY_OUTCOME_DARK:
|
||||
return "DARK";
|
||||
case RAY_OUTCOME_UNRESOLVED:
|
||||
return "UNRES";
|
||||
default:
|
||||
return "INC";
|
||||
}
|
||||
}
|
||||
|
||||
static void print_pair(const char *cam, int di, double theta, const char *pn,
|
||||
const Res *a, const Res *b) {
|
||||
const int same = a->outcome == b->outcome && a->reason == b->reason &&
|
||||
a->end_id == b->end_id;
|
||||
const int esc = a->outcome == RAY_OUTCOME_ESCAPED &&
|
||||
b->outcome == RAY_OUTCOME_ESCAPED;
|
||||
const double dn = esc ? b_ang_delta(a->n, b->n) : NAN;
|
||||
const double dg =
|
||||
(esc && a->g > 0.0 && b->g > 0.0) ? fabs(a->g / b->g - 1.0) : NAN;
|
||||
const double dstop =
|
||||
(isfinite(a->stop_t) && isfinite(b->stop_t)) ? a->stop_t - b->stop_t
|
||||
: NAN;
|
||||
const double dthr = (isfinite(a->thr) && isfinite(b->thr))
|
||||
? a->thr - b->thr
|
||||
: NAN;
|
||||
printf("CAPAIR camera=%s dir=%d theta=%.17g pair=%s class=%s/%s same=%d "
|
||||
"dn_ang=%.17g dgrel=%.17g dstop_t=%.17g dthr=%.17g end=%u/%u\n",
|
||||
cam, di, theta, pn, outcome_name(a->outcome), outcome_name(b->outcome),
|
||||
same, dn, dg, dstop, dthr, a->end_id, b->end_id);
|
||||
}
|
||||
|
||||
/* A two-reference-tier agreement check for one neighbour direction. Returns
|
||||
* 1 when the pair is a valid, agreeing ESC/DARK reference, 0 otherwise. */
|
||||
static int neighbour_reference_check(const char *cam, int di, double theta,
|
||||
const Res *a, const Res *b) {
|
||||
const int class_same = a->outcome == b->outcome && a->reason == b->reason &&
|
||||
a->end_id == b->end_id;
|
||||
const int clean = (a->outcome == RAY_OUTCOME_ESCAPED ||
|
||||
a->outcome == RAY_OUTCOME_DARK) &&
|
||||
(b->outcome == RAY_OUTCOME_ESCAPED ||
|
||||
b->outcome == RAY_OUTCOME_DARK);
|
||||
const int stepped = a->steps > 0 && b->steps > 0;
|
||||
const int esc = a->outcome == RAY_OUTCOME_ESCAPED &&
|
||||
b->outcome == RAY_OUTCOME_ESCAPED;
|
||||
const double dn = esc ? b_ang_delta(a->n, b->n) : NAN;
|
||||
const double dg =
|
||||
(esc && a->g > 0.0 && b->g > 0.0) ? fabs(a->g / b->g - 1.0) : NAN;
|
||||
const double dstop =
|
||||
(isfinite(a->stop_t) && isfinite(b->stop_t)) ? a->stop_t - b->stop_t
|
||||
: NAN;
|
||||
printf("NEIGHBOR_REFERENCE_CHECK camera=%s dir=%d theta=%.17g "
|
||||
"ref_class0=%s/%d/%u ref_class1=%s/%d/%u same=%d clean=%d stepped=%d "
|
||||
"dn_ang=%.17g dgrel=%.17g dstop_t=%.17g\n",
|
||||
cam, di, theta, outcome_name(a->outcome), a->reason, a->end_id,
|
||||
outcome_name(b->outcome), b->reason, b->end_id, class_same, clean,
|
||||
stepped, dn, dg, dstop);
|
||||
return class_same && clean && stepped;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
SpacetimeSource source;
|
||||
if (spacetime_create_schwarzschild_ks(&source, 1.0, 256.0)) {
|
||||
fprintf(stderr, "FATAL: cannot create Schwarzschild source\n");
|
||||
return 2;
|
||||
}
|
||||
|
||||
FILE *f = fopen("raw/critical_ref.csv", "w");
|
||||
if (!f) {
|
||||
fprintf(stderr, "FATAL: cannot open raw/critical_ref.csv\n");
|
||||
return 2;
|
||||
}
|
||||
fprintf(f, "camera,dir,theta,cfg,outcome,reason,end_id,stop_t,steps,"
|
||||
"rejected,rhs,nx,ny,nz,g,thr,L,L0\n");
|
||||
|
||||
Res res[3][3][4];
|
||||
double thetas[3][3];
|
||||
for (int ci = 0; ci < 3; ++ci) {
|
||||
ObserverState observer;
|
||||
if (build_observer(&cams[ci], &source, &observer)) {
|
||||
fprintf(stderr, "FATAL: cannot build observer %s\n", cams[ci].name);
|
||||
return 2;
|
||||
}
|
||||
const double tc = critical_angle(cams[ci].r);
|
||||
const double th[3] = {tc - 1e-7, tc, tc + 1e-7};
|
||||
for (int di = 0; di < 3; ++di) {
|
||||
double dir[3];
|
||||
dir_from_theta(th[di], dir);
|
||||
thetas[ci][di] = th[di];
|
||||
for (int fi = 0; fi < 4; ++fi) {
|
||||
const GeodesicTraceConfig cfg = make_cfg(&cfgs[fi]);
|
||||
const Res r = run_one(&source, &observer, dir, &cfg);
|
||||
res[ci][di][fi] = r;
|
||||
fprintf(f, "%s,%d,%.17g,%s,%d,%d,%u,%.17g,%u,%u,%lu,%.17g,%.17g,"
|
||||
"%.17g,%.17g,%.17g,%.17g,%.17g\n",
|
||||
cams[ci].name, di, th[di], cfgs[fi].name, r.outcome, r.reason,
|
||||
r.end_id, r.stop_t, r.steps, r.rejected, r.rhs, r.n[0], r.n[1],
|
||||
r.n[2], r.g, r.thr, r.L, r.L0);
|
||||
printf("RAW camera=%s dir=%d theta=%.17g cfg=%s outcome=%d reason=%d "
|
||||
"end=%u stop_t=%.17g steps=%u rejected=%u rhs=%lu g=%.17g "
|
||||
"thr=%.17g L=%.17g L0=%.17g nx=%.17g ny=%.17g nz=%.17g\n",
|
||||
cams[ci].name, di, th[di], cfgs[fi].name, r.outcome, r.reason,
|
||||
r.end_id, r.stop_t, r.steps, r.rejected, r.rhs, r.g, r.thr, r.L,
|
||||
r.L0, r.n[0], r.n[1], r.n[2]);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
|
||||
/* All nine directions: ref_vs_tighter, h2_vs_h8, ref_vs_h2, ref_vs_h8. */
|
||||
for (int ci = 0; ci < 3; ++ci) {
|
||||
for (int di = 0; di < 3; ++di) {
|
||||
print_pair(cams[ci].name, di, thetas[ci][di], "ref_vs_tighter",
|
||||
&res[ci][di][0], &res[ci][di][1]);
|
||||
print_pair(cams[ci].name, di, thetas[ci][di], "h2_vs_h8",
|
||||
&res[ci][di][2], &res[ci][di][3]);
|
||||
print_pair(cams[ci].name, di, thetas[ci][di], "ref_vs_h2",
|
||||
&res[ci][di][0], &res[ci][di][2]);
|
||||
print_pair(cams[ci].name, di, thetas[ci][di], "ref_vs_h8",
|
||||
&res[ci][di][0], &res[ci][di][3]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Exact-critical: diagnostic only, never asserted. */
|
||||
for (int ci = 0; ci < 3; ++ci) {
|
||||
const Res *a = &res[ci][1][0];
|
||||
const Res *b = &res[ci][1][1];
|
||||
const int same = a->outcome == b->outcome && a->reason == b->reason &&
|
||||
a->end_id == b->end_id;
|
||||
const int esc = a->outcome == RAY_OUTCOME_ESCAPED &&
|
||||
b->outcome == RAY_OUTCOME_ESCAPED;
|
||||
const int dark = a->outcome == RAY_OUTCOME_DARK &&
|
||||
b->outcome == RAY_OUTCOME_DARK;
|
||||
const double dn = esc ? b_ang_delta(a->n, b->n) : NAN;
|
||||
const double dstop =
|
||||
(isfinite(a->stop_t) && isfinite(b->stop_t)) ? a->stop_t - b->stop_t
|
||||
: NAN;
|
||||
const int nonconverged =
|
||||
!same || (esc && !(dn <= 1e-6)) || (dark && fabs(dstop) > 1e-4);
|
||||
printf("EXACT_CRITICAL_DIRECTION camera=%s theta=%.17g ref0=%s/%d/%u "
|
||||
"ref1=%s/%d/%u same=%d dn_ang=%.17g dstop_t=%.17g\n",
|
||||
cams[ci].name, thetas[ci][1], outcome_name(a->outcome), a->reason,
|
||||
a->end_id, outcome_name(b->outcome), b->reason, b->end_id, same, dn,
|
||||
dstop);
|
||||
if (nonconverged)
|
||||
printf("EXACT_CRITICAL_REFERENCE_NOT_CONVERGED camera=%s dn_ang=%.17g "
|
||||
"dstop_t=%.17g class_same=%d\n",
|
||||
cams[ci].name, dn, dstop, same);
|
||||
}
|
||||
|
||||
/* Neighbour reference check: must pass; this is the assertion-valid path. */
|
||||
int fail = 0;
|
||||
for (int ci = 0; ci < 3; ++ci) {
|
||||
for (int di = 0; di < 3; di += 2) {
|
||||
if (!neighbour_reference_check(cams[ci].name, di, thetas[ci][di],
|
||||
&res[ci][di][0], &res[ci][di][1]))
|
||||
fail = 1;
|
||||
}
|
||||
}
|
||||
|
||||
spacetime_destroy(&source);
|
||||
printf("CRITICAL_REFERENCE_CHECK status=%d\n", fail ? 1 : 0);
|
||||
printf("CRITICAL_REF_DONE\n");
|
||||
return fail ? 1 : 0;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/* Diagnostic only: reuse the production regression's invalid-metric fixture. */
|
||||
#define main adaptive_regression_main_not_called
|
||||
#include "../../tests/test_geodesic_adaptive.c"
|
||||
#undef main
|
||||
|
||||
int main(void) {
|
||||
const double floors[] = {1e-2,1e-4,1e-6,1e-8,1e-10,1e-12,1e-14};
|
||||
for (unsigned i=0;i<sizeof floors/sizeof *floors;++i) {
|
||||
FixtureContext context={.bad_status=SPACETIME_POINT_INVALID_METRIC,
|
||||
.bad_lo=-10,.bad_hi=-.05,.radius=100};
|
||||
SpacetimeSource source={.context=&context,.ops=&fixture_ops};
|
||||
GeodesicTraceConfig config=dp_config(1e-9,.1,10);
|
||||
config.min_step=floors[i]; config.max_step=1;
|
||||
const ObserverState observer=flat_observer_at((double[3]){0,0,0});
|
||||
const double direction[3]={1,0,0};
|
||||
RayEndpoint endpoint=geodesic_trace_past(&source,&observer,direction,&config);
|
||||
printf("FAILURE_FLOOR min=%.0e outcome=%d reason=%d t=%.17g distance_to_invalid=%.17g accepted=%u rejected=%u rhs=%lu\n",
|
||||
floors[i],endpoint.outcome,endpoint.reason,endpoint.stop_coordinate_time,
|
||||
endpoint.stop_coordinate_time+.05,endpoint.accepted_steps,
|
||||
endpoint.rejected_steps,endpoint.rhs_evaluations);
|
||||
if(endpoint.outcome!=RAY_OUTCOME_INCOMPLETE ||
|
||||
endpoint.stop_coordinate_time<=-.05) return 1;
|
||||
}
|
||||
puts("FAILURE_FLOOR_EXIT=0");
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Pure GRLENS v3 map load/compare helpers.
|
||||
|
||||
No renderer, no environment probing, no data generation: this module is only
|
||||
imported by the benchmark scripts under
|
||||
benchmarks/adaptive_step_bounds_2026-10-05/. Keeping it here means the
|
||||
benchmark never imports an untracked module from local/.
|
||||
"""
|
||||
import collections
|
||||
import hashlib
|
||||
import math
|
||||
import struct
|
||||
import zlib
|
||||
|
||||
|
||||
def load(path):
|
||||
"""Parse one GRLENS v3 map; returns (info dict, {film_pos: vertex tuple})."""
|
||||
data = path.read_bytes()
|
||||
assert data[:8] == b'GRLENS\x01\x00'
|
||||
assert struct.unpack_from('<I', data, 8)[0] == 3
|
||||
assert struct.unpack_from('<Q', data, 32)[0] == 1
|
||||
nv, nt = struct.unpack_from('<QQ', data, 200)
|
||||
end = 224 + nv * 108 + nt * 32
|
||||
assert end + 4 == len(data)
|
||||
assert zlib.crc32(data[224:end]) == struct.unpack_from('<I', data, end)[0]
|
||||
vertices = [struct.unpack_from('<9dIIIQQQ', data, 224 + i * 108)
|
||||
for i in range(nv)]
|
||||
costs = [sum(v[j] for v in vertices) for j in (12, 13, 14)]
|
||||
result = dict(vertices=nv, triangles=nt,
|
||||
outcomes=dict(collections.Counter(v[10] for v in vertices)),
|
||||
reasons=dict(collections.Counter(v[11] for v in vertices)),
|
||||
accepted=costs[0], rejected=costs[1], rhs=costs[2])
|
||||
names = ('atol_x', 'atol_Pi', 'atol_L', 'rtol', 'min_step', 'max_step',
|
||||
'max_lookback_time', 'retry_lookback_increment',
|
||||
'max_total_lookback_time')
|
||||
result['provenance'] = dict(zip(names, struct.unpack_from('<9d', data, 100)))
|
||||
result['provenance'].update(
|
||||
integrator=struct.unpack_from('<I', data, 68)[0],
|
||||
initial_step=struct.unpack_from('<d', data, 88)[0],
|
||||
initial_max_steps=struct.unpack_from('<I', data, 96)[0],
|
||||
threshold=struct.unpack_from('<d', data, 48)[0],
|
||||
retry_step_increment=struct.unpack_from('<I', data, 56)[0],
|
||||
max_total_steps=struct.unpack_from('<I', data, 60)[0])
|
||||
for j, name in ((12, 'accepted'), (13, 'rejected'), (14, 'rhs')):
|
||||
xs = sorted(v[j] for v in vertices)
|
||||
result[name + '_percentiles'] = {
|
||||
str(q): xs[min(len(xs) - 1, int(q * (len(xs) - 1)))]
|
||||
for q in (0, .5, .9, .99, 1)}
|
||||
result['sha256'] = hashlib.sha256(data).hexdigest()
|
||||
result['triangle_sha256'] = hashlib.sha256(
|
||||
data[224 + nv * 108:end]).hexdigest()
|
||||
by_film = {(v[0], v[1]): v for v in vertices}
|
||||
result['unique_film_positions'] = len(by_film)
|
||||
result['duplicate_film_positions'] = len(vertices) - len(by_film)
|
||||
return result, by_film
|
||||
|
||||
|
||||
def compare(a, b):
|
||||
"""Compare two {film_pos: vertex} maps by shared film-coordinate identity."""
|
||||
keys = a.keys() & b.keys()
|
||||
mismatches = 0
|
||||
worst_sky = worst_logg = 0.
|
||||
for k in keys:
|
||||
x, y = a[k], b[k]
|
||||
if x[9:12] != y[9:12]:
|
||||
mismatches += 1
|
||||
elif x[10] == 0:
|
||||
n, m = x[5:8], y[5:8]
|
||||
cross = (n[1] * m[2] - n[2] * m[1], n[2] * m[0] - n[0] * m[2],
|
||||
n[0] * m[1] - n[1] * m[0])
|
||||
angle = math.atan2(math.sqrt(sum(v * v for v in cross)),
|
||||
sum(v * w for v, w in zip(n, m)))
|
||||
worst_sky = max(worst_sky, angle)
|
||||
worst_logg = max(worst_logg, abs(x[8] - y[8]))
|
||||
return dict(shared=len(keys), only_a=len(a) - len(keys),
|
||||
only_b=len(b) - len(keys), terminal_mismatches=mismatches,
|
||||
max_sky_angle=worst_sky, max_logg_difference=worst_logg)
|
||||
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Record provenance without launching a render.
|
||||
|
||||
Usage:
|
||||
record_environment.py [OUT_DIR]
|
||||
|
||||
OUT_DIR defaults to <repo>/local/adaptive_bounds_mesh. Writes metadata.json in
|
||||
OUT_DIR. No renderer or test is run.
|
||||
"""
|
||||
import hashlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
OUT = Path(sys.argv[1]).resolve() if len(sys.argv) > 1 else \
|
||||
ROOT / 'local/adaptive_bounds_mesh'
|
||||
PATHS = ['src/geodesic.c', 'src/main.c', 'src/frame.c',
|
||||
'build/Release/schwarzschild_sky']
|
||||
|
||||
metadata = {
|
||||
'recorded_utc': time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime()),
|
||||
'git_head': subprocess.check_output(
|
||||
['git', 'rev-parse', 'HEAD'], cwd=ROOT, text=True).strip(),
|
||||
'hashes': {p: hashlib.sha256((ROOT / p).read_bytes()).hexdigest()
|
||||
for p in PATHS},
|
||||
'compiler': subprocess.check_output(['cc', '--version'], text=True),
|
||||
'cpu': subprocess.check_output(['lscpu'], text=True),
|
||||
'scope': '8 bounded 320x180 candidates plus 2 tight references; no 4K here',
|
||||
'threads': 8,
|
||||
'build_command': 'make -j4 BUILD_TYPE=Release SPACETIME=schwarzschild backend',
|
||||
'run_commands': [
|
||||
'python3 benchmarks/adaptive_step_bounds_2026-10-05/run_mesh.py [OUT]',
|
||||
'python3 benchmarks/adaptive_step_bounds_2026-10-05/run_mesh_reference.py [OUT]',
|
||||
'bash benchmarks/adaptive_step_bounds_2026-10-05/run_failure_floor.sh [OUT]'],
|
||||
}
|
||||
OUT.mkdir(parents=True, exist_ok=True)
|
||||
(OUT / 'metadata.json').write_text(json.dumps(metadata, indent=2) + '\n')
|
||||
print(json.dumps(metadata, indent=2))
|
||||
@@ -0,0 +1,16 @@
|
||||
[
|
||||
{
|
||||
"upper": 2,
|
||||
"command": "/home/wyj/Code/C/GR_4d_raytracing/build/Release/schwarzschild_sky --integrator dp54 --width 3840 --height 2160 --look-ra-deg 262.5 --look-dec-deg -30 --fov-deg 45 --observer-radius 100 --coarse-cell-pixels 16 --refine-max-level 4 --refine-jacobian-min .2 --catalog /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/single_dim_star.csv --exposure 1 --tone-map reinhard --psf-min-y 1e-20 --psf-relative-tail 1e-4 --ode-min-step 1e-12 --ode-max-step 2 --verbose --lens-map-output /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax2.grlens --output /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax2.png",
|
||||
"state": "completed",
|
||||
"returncode": 0,
|
||||
"wall_seconds": 11.389317202148959
|
||||
},
|
||||
{
|
||||
"upper": 8,
|
||||
"command": "/home/wyj/Code/C/GR_4d_raytracing/build/Release/schwarzschild_sky --integrator dp54 --width 3840 --height 2160 --look-ra-deg 262.5 --look-dec-deg -30 --fov-deg 45 --observer-radius 100 --coarse-cell-pixels 16 --refine-max-level 4 --refine-jacobian-min .2 --catalog /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/single_dim_star.csv --exposure 1 --tone-map reinhard --psf-min-y 1e-20 --psf-relative-tail 1e-4 --ode-min-step 1e-12 --ode-max-step 8 --verbose --lens-map-output /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax8.grlens --output /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax8.png",
|
||||
"state": "completed",
|
||||
"returncode": 0,
|
||||
"wall_seconds": 8.389249739935622
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"r100_4k_hmax2": {
|
||||
"vertices": 66045,
|
||||
"triangles": 131338,
|
||||
"outcomes": {
|
||||
"0": 62419,
|
||||
"1": 3626
|
||||
},
|
||||
"reasons": {
|
||||
"0": 62419,
|
||||
"1": 3626
|
||||
},
|
||||
"accepted": 15768677,
|
||||
"rejected": 97176,
|
||||
"rhs": 130409139,
|
||||
"provenance": {
|
||||
"atol_x": 1e-09,
|
||||
"atol_Pi": 1e-09,
|
||||
"atol_L": 1e-09,
|
||||
"rtol": 1e-09,
|
||||
"min_step": 1e-12,
|
||||
"max_step": 2.0,
|
||||
"max_lookback_time": 6553.6,
|
||||
"retry_lookback_increment": 6553.6,
|
||||
"max_total_lookback_time": 26214.4,
|
||||
"integrator": 1,
|
||||
"initial_step": 0.1,
|
||||
"initial_max_steps": 65536,
|
||||
"threshold": 8.0,
|
||||
"retry_step_increment": 65536,
|
||||
"max_total_steps": 262144
|
||||
},
|
||||
"accepted_percentiles": {
|
||||
"0": 162,
|
||||
"0.5": 212,
|
||||
"0.9": 328,
|
||||
"0.99": 404,
|
||||
"1": 520
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 0,
|
||||
"0.5": 1,
|
||||
"0.9": 3,
|
||||
"0.99": 4,
|
||||
"1": 5
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 1421,
|
||||
"0.5": 1799,
|
||||
"0.9": 2597,
|
||||
"0.99": 3129,
|
||||
"1": 3941
|
||||
},
|
||||
"sha256": "ef7267074338192f8597b1f2a0300fd36da8e25441e064719c7ad586c481ae7a",
|
||||
"triangle_sha256": "2a943902e9b1401a16bc40fc547c19077bb12e396080074393636ee30761b7b2",
|
||||
"unique_film_positions": 66045,
|
||||
"duplicate_film_positions": 0,
|
||||
"requested_samples_including_nonpersistent_probes": 116308,
|
||||
"initial_samples": 32776,
|
||||
"refinement_samples_per_generation": [
|
||||
32686,
|
||||
7900,
|
||||
13375,
|
||||
24826,
|
||||
4403,
|
||||
261,
|
||||
67,
|
||||
14
|
||||
],
|
||||
"trace_wall_seconds": 10.774,
|
||||
"wall_seconds": 11.389317202148959
|
||||
},
|
||||
"r100_4k_hmax8": {
|
||||
"vertices": 66045,
|
||||
"triangles": 131338,
|
||||
"outcomes": {
|
||||
"0": 62419,
|
||||
"1": 3626
|
||||
},
|
||||
"reasons": {
|
||||
"0": 62419,
|
||||
"1": 3626
|
||||
},
|
||||
"accepted": 10183020,
|
||||
"rejected": 194781,
|
||||
"rhs": 91991144,
|
||||
"provenance": {
|
||||
"atol_x": 1e-09,
|
||||
"atol_Pi": 1e-09,
|
||||
"atol_L": 1e-09,
|
||||
"rtol": 1e-09,
|
||||
"min_step": 1e-12,
|
||||
"max_step": 8.0,
|
||||
"max_lookback_time": 6553.6,
|
||||
"retry_lookback_increment": 6553.6,
|
||||
"max_total_lookback_time": 26214.4,
|
||||
"integrator": 1,
|
||||
"initial_step": 0.1,
|
||||
"initial_max_steps": 65536,
|
||||
"threshold": 8.0,
|
||||
"retry_step_increment": 65536,
|
||||
"max_total_steps": 262144
|
||||
},
|
||||
"accepted_percentiles": {
|
||||
"0": 80,
|
||||
"0.5": 127,
|
||||
"0.9": 259,
|
||||
"0.99": 337,
|
||||
"1": 432
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 0,
|
||||
"0.5": 3,
|
||||
"0.9": 5,
|
||||
"0.99": 6,
|
||||
"1": 7
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 868,
|
||||
"0.5": 1204,
|
||||
"0.9": 2114,
|
||||
"0.99": 2646,
|
||||
"1": 3318
|
||||
},
|
||||
"sha256": "b1897493b7fa5b88f86872e81d15ac876818a705fa0fefe8b1ee262da9de59bb",
|
||||
"triangle_sha256": "2a943902e9b1401a16bc40fc547c19077bb12e396080074393636ee30761b7b2",
|
||||
"unique_film_positions": 66045,
|
||||
"duplicate_film_positions": 0,
|
||||
"requested_samples_including_nonpersistent_probes": 116308,
|
||||
"initial_samples": 32776,
|
||||
"refinement_samples_per_generation": [
|
||||
32686,
|
||||
7900,
|
||||
13375,
|
||||
24826,
|
||||
4403,
|
||||
261,
|
||||
67,
|
||||
14
|
||||
],
|
||||
"trace_wall_seconds": 7.805000000000001,
|
||||
"wall_seconds": 8.389249739935622
|
||||
},
|
||||
"comparison": {
|
||||
"shared": 66045,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 7.954413592847793e-07,
|
||||
"max_logg_difference": 3.471110204822381e-11,
|
||||
"triangle_payload_identical": true
|
||||
},
|
||||
"relative_reduction": {
|
||||
"accepted": 0.35422483446138187,
|
||||
"rhs": 0.2945958795111745,
|
||||
"wall_seconds": 0.2634106513116764,
|
||||
"trace_wall_seconds": 0.27557081863746047
|
||||
},
|
||||
"cost_scope": "accepted/rejected/RHS sums cover final persistent vertices only; nonpersistent discarded refinement probes are not in v3 map. Do not interpret them as full-render executed RHS totals."
|
||||
}
|
||||
@@ -0,0 +1,242 @@
|
||||
OMP_NUM_THREADS=16 OMP_DYNAMIC=FALSE /home/wyj/Code/C/GR_4d_raytracing/build/Release/schwarzschild_sky --integrator dp54 --width 3840 --height 2160 --look-ra-deg 262.5 --look-dec-deg -30 --fov-deg 45 --observer-radius 100 --coarse-cell-pixels 16 --refine-max-level 4 --refine-jacobian-min .2 --catalog /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/single_dim_star.csv --exposure 1 --tone-map reinhard --psf-min-y 1e-20 --psf-relative-tail 1e-4 --ode-min-step 1e-12 --ode-max-step 2 --verbose --lens-map-output /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax2.grlens --output /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax2.png
|
||||
Blackbody LUT: 1024 CIE 1931 2-deg 1 nm-linear XYZ nodes, T=[670.146556, 101408.88] K, loaded assets/blackbody/cie1931_2deg_xyz_1024.grbblut in 0.000040 s; payload fnv1a64=0e39867b0e70a809
|
||||
Blackbody backend: lut
|
||||
PSF cache ready: 64x64 phases, radius 25 px, relative tail 1e-04, tail abs 1e-06, boundary 1e-07, build 0.250 s
|
||||
Frame 0: integrator=dp54 step=0.1 max_steps=65536 threshold=8 atol=(x 1e-09, Pi 1e-09, L 1e-09) rtol=1e-09 bounds=[1e-12, 2] max_rejections=32 lookback=6553.6
|
||||
Frame 0: tracing 32776 initial rays from 64800 mesh triangles...
|
||||
Frame 0: initial ray trace finished in 2.562 s.
|
||||
Frame 0: starting adaptive ray-trace refinement (max level 4)...
|
||||
Frame 0: refinement generation 0 tracing 32686 samples from 32776 vertices and 64800 triangles.
|
||||
Frame 0: refinement generation 0 finished; added 3014 vertices, now 35790 vertices and 70828 triangles.
|
||||
Frame 0: refinement generation 1 tracing 7900 samples from 35790 vertices and 70828 triangles.
|
||||
Frame 0: refinement generation 1 finished; added 4852 vertices, now 40642 vertices and 80532 triangles.
|
||||
Frame 0: refinement generation 2 tracing 13375 samples from 40642 vertices and 80532 triangles.
|
||||
Frame 0: refinement generation 2 finished; added 8889 vertices, now 49531 vertices and 98310 triangles.
|
||||
Frame 0: refinement generation 3 tracing 24826 samples from 49531 vertices and 98310 triangles.
|
||||
Frame 0: refinement generation 3 finished; added 16055 vertices, now 65586 vertices and 130420 triangles.
|
||||
Frame 0: refinement generation 4 tracing 4403 samples from 65586 vertices and 130420 triangles.
|
||||
Frame 0: refinement generation 4 finished; added 389 vertices, now 65975 vertices and 131198 triangles.
|
||||
Frame 0: refinement generation 5 tracing 261 samples from 65975 vertices and 131198 triangles.
|
||||
Frame 0: refinement generation 5 finished; added 58 vertices, now 66033 vertices and 131314 triangles.
|
||||
Frame 0: refinement generation 6 tracing 67 samples from 66033 vertices and 131314 triangles.
|
||||
Frame 0: refinement generation 6 finished; added 12 vertices, now 66045 vertices and 131338 triangles.
|
||||
Frame 0: refinement generation 7 tracing 14 samples from 66045 vertices and 131338 triangles.
|
||||
Frame 0: refinement generation 7 finished; added 0 vertices, now 66045 vertices and 131338 triangles.
|
||||
Frame 0: adaptive ray-trace refinement finished in 8.212 s; 66045 vertices, 131338 triangles.
|
||||
Boundary accounting: EEE=122456 DDD=5624 EED/EDD=3258 UUD/UDD=0 U+E=0 UUU=0 error=0; approx-black=0 (0 px^2), retries=0, budget-incomplete=0.
|
||||
Frame 0 trace cost: accepted=15768677 rejected=97176 rhs=130409139 over 66045 vertices (saturated=0).
|
||||
Wrote lens map: /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax2.grlens (66045 vertices, 131338 triangles)
|
||||
Frame 0: traced 66045 lens vertices; starting catalog render.
|
||||
Frame 0: finding and prefetching catalog tiles...
|
||||
Frame 0: catalog prefetch finished (0 candidate tiles).
|
||||
Frame 0: splatting 131338 lens triangles...
|
||||
Frame 0: splat worker 1/16 started.
|
||||
Frame 0: splat worker 1/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 6/16 started.
|
||||
Frame 0: splat worker 8/16 started.
|
||||
Frame 0: splat worker 8/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 12/16 started.
|
||||
Frame 0: splat worker 13/16 started.
|
||||
Frame 0: splat worker 3/16 started.
|
||||
Frame 0: splat worker 6/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 9/16 started.
|
||||
Frame 0: splat worker 11/16 started.
|
||||
Frame 0: splat worker 7/16 started.
|
||||
Frame 0: splat worker 7/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 15/16 started.
|
||||
Frame 0: splat worker 15/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 10/16 started.
|
||||
Frame 0: splat worker 8/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 14/16 started.
|
||||
Frame 0: splat worker 4/16 started.
|
||||
Frame 0: splat worker 13/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 2/16 started.
|
||||
Frame 0: splat worker 5/16 started.
|
||||
Frame 0: splat worker 5/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 16/16 started.
|
||||
Frame 0: splat worker 16/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 6/16 finished after 8555 local triangles.
|
||||
Frame 0: splat worker 16/16 finished after 8230 local triangles.
|
||||
Frame 0: splat worker 15/16 finished after 8192 local triangles.
|
||||
Frame 0: splat worker 11/16 finished after 8468 local triangles.
|
||||
Frame 0: splat worker 10/16 finished after 8207 local triangles.
|
||||
Frame 0: splat worker 5/16 finished after 8824 local triangles.
|
||||
Frame 0: splat worker 4/16 finished after 8382 local triangles.
|
||||
Frame 0: splat worker 3/16 finished after 8004 local triangles.
|
||||
Frame 0: splat worker 8/16 finished after 9239 local triangles.
|
||||
Frame 0: splat worker 1/16 finished after 8561 local triangles.
|
||||
Frame 0: splat worker 12/16 finished after 8804 local triangles.
|
||||
Frame 0: splat worker 14/16 finished after 8429 local triangles.
|
||||
Frame 0: splat worker 7/16 finished after 4096 local triangles.
|
||||
Frame 0: splat worker 2/16 finished after 8201 local triangles.
|
||||
Frame 0: splat worker 9/16 finished after 8290 local triangles.
|
||||
Frame 0: splat worker 13/16 finished after 8856 local triangles.
|
||||
Frame 0: catalog splatting finished in 0.1 s; writing image...
|
||||
Rendered 1965 images from 1 catalog stars to /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax2.png (ok)
|
||||
PSF splats: cached 0, cached wing-clipped 0, direct fallbacks 0, discarded below min-Y 1965
|
||||
Warning: --psf-min-y discarded one or more PSF events.
|
||||
@@ -0,0 +1,233 @@
|
||||
OMP_NUM_THREADS=16 OMP_DYNAMIC=FALSE /home/wyj/Code/C/GR_4d_raytracing/build/Release/schwarzschild_sky --integrator dp54 --width 3840 --height 2160 --look-ra-deg 262.5 --look-dec-deg -30 --fov-deg 45 --observer-radius 100 --coarse-cell-pixels 16 --refine-max-level 4 --refine-jacobian-min .2 --catalog /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/single_dim_star.csv --exposure 1 --tone-map reinhard --psf-min-y 1e-20 --psf-relative-tail 1e-4 --ode-min-step 1e-12 --ode-max-step 8 --verbose --lens-map-output /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax8.grlens --output /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax8.png
|
||||
Blackbody LUT: 1024 CIE 1931 2-deg 1 nm-linear XYZ nodes, T=[670.146556, 101408.88] K, loaded assets/blackbody/cie1931_2deg_xyz_1024.grbblut in 0.000041 s; payload fnv1a64=0e39867b0e70a809
|
||||
Blackbody backend: lut
|
||||
PSF cache ready: 64x64 phases, radius 25 px, relative tail 1e-04, tail abs 1e-06, boundary 1e-07, build 0.223 s
|
||||
Frame 0: integrator=dp54 step=0.1 max_steps=65536 threshold=8 atol=(x 1e-09, Pi 1e-09, L 1e-09) rtol=1e-09 bounds=[1e-12, 8] max_rejections=32 lookback=6553.6
|
||||
Frame 0: tracing 32776 initial rays from 64800 mesh triangles...
|
||||
Frame 0: initial ray trace finished in 1.735 s.
|
||||
Frame 0: starting adaptive ray-trace refinement (max level 4)...
|
||||
Frame 0: refinement generation 0 tracing 32686 samples from 32776 vertices and 64800 triangles.
|
||||
Frame 0: refinement generation 0 finished; added 3014 vertices, now 35790 vertices and 70828 triangles.
|
||||
Frame 0: refinement generation 1 tracing 7900 samples from 35790 vertices and 70828 triangles.
|
||||
Frame 0: refinement generation 1 finished; added 4852 vertices, now 40642 vertices and 80532 triangles.
|
||||
Frame 0: refinement generation 2 tracing 13375 samples from 40642 vertices and 80532 triangles.
|
||||
Frame 0: refinement generation 2 finished; added 8889 vertices, now 49531 vertices and 98310 triangles.
|
||||
Frame 0: refinement generation 3 tracing 24826 samples from 49531 vertices and 98310 triangles.
|
||||
Frame 0: refinement generation 3 finished; added 16055 vertices, now 65586 vertices and 130420 triangles.
|
||||
Frame 0: refinement generation 4 tracing 4403 samples from 65586 vertices and 130420 triangles.
|
||||
Frame 0: refinement generation 4 finished; added 389 vertices, now 65975 vertices and 131198 triangles.
|
||||
Frame 0: refinement generation 5 tracing 261 samples from 65975 vertices and 131198 triangles.
|
||||
Frame 0: refinement generation 5 finished; added 58 vertices, now 66033 vertices and 131314 triangles.
|
||||
Frame 0: refinement generation 6 tracing 67 samples from 66033 vertices and 131314 triangles.
|
||||
Frame 0: refinement generation 6 finished; added 12 vertices, now 66045 vertices and 131338 triangles.
|
||||
Frame 0: refinement generation 7 tracing 14 samples from 66045 vertices and 131338 triangles.
|
||||
Frame 0: refinement generation 7 finished; added 0 vertices, now 66045 vertices and 131338 triangles.
|
||||
Frame 0: adaptive ray-trace refinement finished in 6.070 s; 66045 vertices, 131338 triangles.
|
||||
Boundary accounting: EEE=122456 DDD=5624 EED/EDD=3258 UUD/UDD=0 U+E=0 UUU=0 error=0; approx-black=0 (0 px^2), retries=0, budget-incomplete=0.
|
||||
Frame 0 trace cost: accepted=10183020 rejected=194781 rhs=91991144 over 66045 vertices (saturated=0).
|
||||
Wrote lens map: /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax8.grlens (66045 vertices, 131338 triangles)
|
||||
Frame 0: traced 66045 lens vertices; starting catalog render.
|
||||
Frame 0: finding and prefetching catalog tiles...
|
||||
Frame 0: catalog prefetch finished (0 candidate tiles).
|
||||
Frame 0: splatting 131338 lens triangles...
|
||||
Frame 0: splat worker 1/16 started.
|
||||
Frame 0: splat worker 1/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 10/16 started.
|
||||
Frame 0: splat worker 10/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 2/16 started.
|
||||
Frame 0: splat worker 2/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 11/16 started.
|
||||
Frame 0: splat worker 12/16 started.
|
||||
Frame 0: splat worker 12/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 7/16 started.
|
||||
Frame 0: splat worker 16/16 started.
|
||||
Frame 0: splat worker 16/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 15/16 started.
|
||||
Frame 0: splat worker 8/16 started.
|
||||
Frame 0: splat worker 16/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 14/16 started.
|
||||
Frame 0: splat worker 5/16 started.
|
||||
Frame 0: splat worker 6/16 started.
|
||||
Frame 0: splat worker 6/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 9/16 started.
|
||||
Frame 0: splat worker 7/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 4/16 started.
|
||||
Frame 0: splat worker 3/16 started.
|
||||
Frame 0: splat worker 8/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 13/16 started.
|
||||
Frame 0: splat worker 8/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 8 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 16 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 32 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 64 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 128 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 256 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 512 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 1024 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 2048 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 4/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 8/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 16/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 3/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 11/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 1/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 15/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 9/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 6/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 13/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 2/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 12/16 reached 4096 local triangles.
|
||||
Frame 0: splat worker 10/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 5/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 14/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 7/16 reached 8192 local triangles.
|
||||
Frame 0: splat worker 10/16 finished after 10255 local triangles.
|
||||
Frame 0: splat worker 13/16 finished after 7729 local triangles.
|
||||
Frame 0: splat worker 14/16 finished after 8310 local triangles.
|
||||
Frame 0: splat worker 3/16 finished after 8102 local triangles.
|
||||
Frame 0: splat worker 12/16 finished after 5601 local triangles.
|
||||
Frame 0: splat worker 2/16 finished after 6132 local triangles.
|
||||
Frame 0: splat worker 7/16 finished after 8294 local triangles.
|
||||
Frame 0: splat worker 6/16 finished after 7791 local triangles.
|
||||
Frame 0: splat worker 5/16 finished after 8901 local triangles.
|
||||
Frame 0: splat worker 4/16 finished after 8159 local triangles.
|
||||
Frame 0: splat worker 1/16 finished after 7930 local triangles.
|
||||
Frame 0: splat worker 16/16 finished after 12209 local triangles.
|
||||
Frame 0: splat worker 15/16 finished after 7871 local triangles.
|
||||
Frame 0: splat worker 9/16 finished after 7811 local triangles.
|
||||
Frame 0: splat worker 11/16 finished after 8075 local triangles.
|
||||
Frame 0: splat worker 8/16 finished after 8168 local triangles.
|
||||
Frame 0: catalog splatting finished in 0.1 s; writing image...
|
||||
Rendered 1954 images from 1 catalog stars to /home/wyj/Code/C/GR_4d_raytracing/local/step_bounds_4k/r100_4k_hmax8.png (ok)
|
||||
PSF splats: cached 0, cached wing-clipped 0, direct fallbacks 0, discarded below min-Y 1954
|
||||
Warning: --psf-min-y discarded one or more PSF events.
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"binary_sha256": "72ba409cd60bc72a7f0ca16f736cab6be6d4ab3f42a11d00647eeb03cc7a7e2a",
|
||||
"utc": "2026-10-05T22:19:23Z",
|
||||
"source_sha256": {
|
||||
"src/main.c": "6cf3f6354b52b5eb029e1f3605c403c4161bb3df5d4202a47b97409318358ff9",
|
||||
"src/geodesic.c": "25f24a2e1c9ce49508fed230dfb3f6d9986e92bb4a5e6347bb2356ac0ee5fffa",
|
||||
"src/frame.c": "317cf2a777be139a2cab6a1b9f00094b7834fbb0382389960526ee3281ca55bf"
|
||||
},
|
||||
"catalog": "one negligible synthetic point; no survey catalog",
|
||||
"scope": "README R100 45-degree 3840x2160 coarse16 refine4 jacobian0.2",
|
||||
"threads": 16,
|
||||
"max_attempts": 2
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
r100_4k_hmax2 {"vertices": 66045, "triangles": 131338, "outcomes": {"0": 62419, "1": 3626}, "reasons": {"0": 62419, "1": 3626}, "accepted": 15768677, "rejected": 97176, "rhs": 130409139, "provenance": {"atol_x": 1e-09, "atol_Pi": 1e-09, "atol_L": 1e-09, "rtol": 1e-09, "min_step": 1e-12, "max_step": 2.0, "max_lookback_time": 6553.6, "retry_lookback_increment": 6553.6, "max_total_lookback_time": 26214.4, "integrator": 1, "initial_step": 0.1, "initial_max_steps": 65536, "threshold": 8.0, "retry_step_increment": 65536, "max_total_steps": 262144}, "accepted_percentiles": {"0": 162, "0.5": 212, "0.9": 328, "0.99": 404, "1": 520}, "rejected_percentiles": {"0": 0, "0.5": 1, "0.9": 3, "0.99": 4, "1": 5}, "rhs_percentiles": {"0": 1421, "0.5": 1799, "0.9": 2597, "0.99": 3129, "1": 3941}, "sha256": "ef7267074338192f8597b1f2a0300fd36da8e25441e064719c7ad586c481ae7a", "unique_film_positions": 66045, "duplicate_film_positions": 0, "wall_seconds": 11.389317202148959}
|
||||
r100_4k_hmax8 {"vertices": 66045, "triangles": 131338, "outcomes": {"0": 62419, "1": 3626}, "reasons": {"0": 62419, "1": 3626}, "accepted": 10183020, "rejected": 194781, "rhs": 91991144, "provenance": {"atol_x": 1e-09, "atol_Pi": 1e-09, "atol_L": 1e-09, "rtol": 1e-09, "min_step": 1e-12, "max_step": 8.0, "max_lookback_time": 6553.6, "retry_lookback_increment": 6553.6, "max_total_lookback_time": 26214.4, "integrator": 1, "initial_step": 0.1, "initial_max_steps": 65536, "threshold": 8.0, "retry_step_increment": 65536, "max_total_steps": 262144}, "accepted_percentiles": {"0": 80, "0.5": 127, "0.9": 259, "0.99": 337, "1": 432}, "rejected_percentiles": {"0": 0, "0.5": 3, "0.9": 5, "0.99": 6, "1": 7}, "rhs_percentiles": {"0": 868, "0.5": 1204, "0.9": 2114, "0.99": 2646, "1": 3318}, "sha256": "b1897493b7fa5b88f86872e81d15ac876818a705fa0fefe8b1ee262da9de59bb", "unique_film_positions": 66045, "duplicate_film_positions": 0, "wall_seconds": 8.389249739935622}
|
||||
comparison {"shared": 66045, "only_a": 0, "only_b": 0, "terminal_mismatches": 0, "max_sky_angle": 7.954413592847793e-07, "max_logg_difference": 3.471110204822381e-11}
|
||||
@@ -0,0 +1,37 @@
|
||||
camera,dir,theta,cfg,outcome,reason,end_id,stop_t,steps,rejected,rhs,nx,ny,nz,g,thr,L,L0
|
||||
r30_inward,0,0.16812279429621627,ref_tol1e-12_h0.25,1,1,4294967295,-142.17574796859728,2081,0,14854,0,0,0,0,8.0000000000000195,8.0658840965825682,0.065884096582549498
|
||||
r30_inward,0,0.16812279429621627,ref_tol1e-13_h0.125,1,1,4294967295,-142.17574845681202,3332,0,23611,0,0,0,0,8.0000000000000249,8.0658840965825735,0.065884096582549498
|
||||
r30_inward,0,0.16812279429621627,tol1e-11_h2,1,1,4294967295,-142.17574172483768,1304,0,9415,0,0,0,0,8.0000000000000266,8.0658840965825753,0.065884096582549498
|
||||
r30_inward,0,0.16812279429621627,tol1e-11_h8,1,1,4294967295,-142.17574172483768,1304,0,9415,0,0,0,0,8.0000000000000266,8.0658840965825753,0.065884096582549498
|
||||
r30_inward,1,0.16812289429621627,ref_tol1e-12_h0.25,1,1,4294967295,-225.85293500418322,3746,0,26509,0,0,0,0,8.0000000000000338,8.0658840955358357,0.065884095535802364
|
||||
r30_inward,1,0.16812289429621627,ref_tol1e-13_h0.125,1,1,4294967295,-238.90906331559862,6388,0,45003,0,0,0,0,8.000000000000016,8.065884095535818,0.065884095535802364
|
||||
r30_inward,1,0.16812289429621627,tol1e-11_h2,1,1,4294967295,-212.59582609170599,2180,0,15547,0,0,0,0,8.0000000000000071,8.0658840955358091,0.065884095535802364
|
||||
r30_inward,1,0.16812289429621627,tol1e-11_h8,1,1,4294967295,-212.59582609170599,2180,0,15547,0,0,0,0,8.0000000000000071,8.0658840955358091,0.065884095535802364
|
||||
r30_inward,2,0.16812299429621627,ref_tol1e-12_h0.25,0,0,0,-370.18047830118235,2790,1,19831,-0.35873499147611138,-6.5068267720987458e-16,-0.9334394495041628,1.0350983390130453,nan,-0.038385896473527227,0.065884094489054593
|
||||
r30_inward,2,0.16812299429621627,ref_tol1e-13_h0.125,0,0,0,-370.1804778092,4857,1,34300,-0.35873507984449715,-6.5068265353608199e-16,-0.93343941554284182,1.035098339013504,nan,-0.038385896473972475,0.065884094489054593
|
||||
r30_inward,2,0.16812299429621627,tol1e-11_h2,0,0,0,-370.18048452857704,1299,1,9387,-0.3587338729380895,-6.5068297686427377e-16,-0.93343987937458439,1.0350983390054869,nan,-0.038385896466199748,0.065884094489054593
|
||||
r30_inward,2,0.16812299429621627,tol1e-11_h8,0,0,0,-370.1804845285946,1257,1,9100,-0.35873387293809145,-6.5068297686427416e-16,-0.93343987937458361,1.035098339005424,nan,-0.038385896466138665,0.065884094489054593
|
||||
r100_inward,0,0.051461896376274734,ref_tol1e-12_h0.25,1,1,4294967295,-211.027405235164,2252,0,16051,0,0,0,0,8.0000000000000266,8.0199767087115159,0.01997670871149013
|
||||
r100_inward,0,0.051461896376274734,ref_tol1e-13_h0.125,1,1,4294967295,-211.02740538583069,3727,0,26376,0,0,0,0,8.0000000000000142,8.0199767087115035,0.01997670871149013
|
||||
r100_inward,0,0.051461896376274734,tol1e-11_h2,1,1,4294967295,-211.02740354768991,1292,0,9331,0,0,0,0,8.0000000000000533,8.0199767087115426,0.01997670871149013
|
||||
r100_inward,0,0.051461896376274734,tol1e-11_h8,1,1,4294967295,-211.02740354768991,1292,0,9331,0,0,0,0,8.0000000000000533,8.0199767087115426,0.01997670871149013
|
||||
r100_inward,1,0.051461996376274736,ref_tol1e-12_h0.25,1,1,4294967295,-301.07740508539132,4045,0,28602,0,0,0,0,8.0000000000000018,8.0199767086106277,0.019976708610626077
|
||||
r100_inward,1,0.051461996376274736,ref_tol1e-13_h0.125,1,1,4294967295,-313.77734009633099,6986,0,49189,0,0,0,0,8.0000000000000018,8.0199767086106277,0.019976708610626077
|
||||
r100_inward,1,0.051461996376274736,tol1e-11_h2,1,1,4294967295,-288.21364790845217,2256,0,16079,0,0,0,0,8.0000000000000639,8.0199767086106899,0.019976708610626077
|
||||
r100_inward,1,0.051461996376274736,tol1e-11_h8,1,1,4294967295,-288.21364790845217,2256,0,16079,0,0,0,0,8.0000000000000639,8.0199767086106899,0.019976708610626077
|
||||
r100_inward,2,0.051462096376274739,ref_tol1e-12_h0.25,0,0,0,-439.31355204311825,2969,0,21077,-0.99110324423183982,-3.1326762563025509e-16,-0.13309530146899301,1.0101525445517785,nan,-0.013990814384499865,0.019976708509762027
|
||||
r100_inward,2,0.051462096376274739,ref_tol1e-13_h0.125,0,0,0,-439.31355190087947,5265,0,37149,-0.99110324787406912,-3.132675617927086e-16,-0.13309527434688151,1.010152544552184,nan,-0.013990814384902493,0.019976708509762027
|
||||
r100_inward,2,0.051462096376274739,tol1e-11_h2,0,0,0,-439.31355372933643,1291,1,9338,-0.99110320105936889,-3.1326838231562615e-16,-0.13309562295534913,1.010152544545182,nan,-0.013990814377948021,0.019976708509762027
|
||||
r100_inward,2,0.051462096376274739,tol1e-11_h8,0,0,0,-439.31355372935258,1250,1,9051,-0.991103201059369,-3.1326838231562231e-16,-0.13309562295534744,1.0101525445451216,nan,-0.013990814377887956,0.019976708509762027
|
||||
r2p1_outward,0,0.57037671003940071,ref_tol1e-12_h0.25,0,0,0,-333.45070432558816,2639,1,18774,-0.30976840652656795,0,-0.95081203942629522,4.5825756949539365,nan,-1.5261506795942201,-0.42981831573151047
|
||||
r2p1_outward,0,0.57037671003940071,ref_tol1e-13_h0.125,0,0,0,-333.45070506871724,4589,2,32431,-0.30976827139480229,0,-0.95081208345133916,4.5825756949557528,nan,-1.5261506795946143,-0.42981831573151047
|
||||
r2p1_outward,0,0.57037671003940071,tol1e-11_h2,0,0,0,-333.45070071486469,1210,2,8778,-0.30976906608911198,0,-0.95081182454483582,4.5825756949192931,nan,-1.5261506795866686,-0.42981831573151047
|
||||
r2p1_outward,0,0.57037671003940071,tol1e-11_h8,0,0,0,-333.45070071488124,1169,2,8491,-0.30976906647032454,0,-0.95081182442063883,4.5825756949190151,nan,-1.5261506795866076,-0.42981831573151047
|
||||
r2p1_outward,1,0.57037681003940066,ref_tol1e-12_h0.25,0,0,0,-414.94010328784253,4263,2,30149,0.3336576345143959,0,0.94269432104487505,4.5825756949507124,nan,-1.5261506795930104,-0.42981805651739968
|
||||
r2p1_outward,1,0.57037681003940066,ref_tol1e-13_h0.125,0,0,0,-427.08073320404128,7560,1,53221,-0.91087431940825703,0,-0.41268386719442363,4.5825756949554943,nan,-1.5261506795940556,-0.42981805651739968
|
||||
r2p1_outward,1,0.57037681003940066,tol1e-11_h2,0,0,0,-406.06581257014602,2120,2,15141,0.88820167266587602,0,-0.45945379383953305,4.58257569487448,nan,-1.5261506795763404,-0.42981805651739968
|
||||
r2p1_outward,1,0.57037681003940066,tol1e-11_h8,0,0,0,-406.06581257016262,2078,2,14854,0.88817826517728515,0,-0.4594990416384655,4.5825756948742002,nan,-1.5261506795762789,-0.42981805651739968
|
||||
r2p1_outward,2,0.57037691003940061,ref_tol1e-12_h0.25,1,1,4294967295,-109.41561097431348,1950,1,13944,0,0,0,0,8.0000000000000195,7.5701822026967047,-0.42981779730331554
|
||||
r2p1_outward,2,0.57037691003940061,ref_tol1e-13_h0.125,1,1,4294967295,-109.41561022532379,3098,1,21980,0,0,0,0,8.000000000000016,7.5701822026967012,-0.42981779730331554
|
||||
r2p1_outward,2,0.57037691003940061,tol1e-11_h2,1,1,4294967295,-109.41561457850582,1228,1,8890,0,0,0,0,8.0000000000000195,7.5701822026967038,-0.42981779730331554
|
||||
r2p1_outward,2,0.57037691003940061,tol1e-11_h8,1,1,4294967295,-109.41561457850582,1228,1,8890,0,0,0,0,8.0000000000000195,7.5701822026967038,-0.42981779730331554
|
||||
|
@@ -0,0 +1,96 @@
|
||||
### building critical_ref_check
|
||||
+ cc -std=c11 -O2 -Wall -Wextra -Wpedantic -I/home/wyj/Code/C/GR_4d_raytracing/src /home/wyj/Code/C/GR_4d_raytracing/benchmarks/adaptive_step_bounds_2026-10-05/critical_ref_check.c /home/wyj/Code/C/GR_4d_raytracing/src/geodesic.c /home/wyj/Code/C/GR_4d_raytracing/src/asymptotic.c /home/wyj/Code/C/GR_4d_raytracing/src/asymptotic_schwarzschild.c /home/wyj/Code/C/GR_4d_raytracing/src/spacetime_common.c /home/wyj/Code/C/GR_4d_raytracing/src/observer.c -lm -o /tmp/opencode/step_bounds/critical_ref_check
|
||||
+ echo '### command: critical_ref_check'
|
||||
### command: critical_ref_check
|
||||
+ /tmp/opencode/step_bounds/critical_ref_check
|
||||
RAW camera=r30_inward dir=0 theta=0.16812279429621627 cfg=ref_tol1e-12_h0.25 outcome=1 reason=1 end=4294967295 stop_t=-142.17574796859728 steps=2081 rejected=0 rhs=14854 g=0 thr=8.0000000000000195 L=8.0658840965825682 L0=0.065884096582549498 nx=0 ny=0 nz=0
|
||||
RAW camera=r30_inward dir=0 theta=0.16812279429621627 cfg=ref_tol1e-13_h0.125 outcome=1 reason=1 end=4294967295 stop_t=-142.17574845681202 steps=3332 rejected=0 rhs=23611 g=0 thr=8.0000000000000249 L=8.0658840965825735 L0=0.065884096582549498 nx=0 ny=0 nz=0
|
||||
RAW camera=r30_inward dir=0 theta=0.16812279429621627 cfg=tol1e-11_h2 outcome=1 reason=1 end=4294967295 stop_t=-142.17574172483768 steps=1304 rejected=0 rhs=9415 g=0 thr=8.0000000000000266 L=8.0658840965825753 L0=0.065884096582549498 nx=0 ny=0 nz=0
|
||||
RAW camera=r30_inward dir=0 theta=0.16812279429621627 cfg=tol1e-11_h8 outcome=1 reason=1 end=4294967295 stop_t=-142.17574172483768 steps=1304 rejected=0 rhs=9415 g=0 thr=8.0000000000000266 L=8.0658840965825753 L0=0.065884096582549498 nx=0 ny=0 nz=0
|
||||
RAW camera=r30_inward dir=1 theta=0.16812289429621627 cfg=ref_tol1e-12_h0.25 outcome=1 reason=1 end=4294967295 stop_t=-225.85293500418322 steps=3746 rejected=0 rhs=26509 g=0 thr=8.0000000000000338 L=8.0658840955358357 L0=0.065884095535802364 nx=0 ny=0 nz=0
|
||||
RAW camera=r30_inward dir=1 theta=0.16812289429621627 cfg=ref_tol1e-13_h0.125 outcome=1 reason=1 end=4294967295 stop_t=-238.90906331559862 steps=6388 rejected=0 rhs=45003 g=0 thr=8.000000000000016 L=8.065884095535818 L0=0.065884095535802364 nx=0 ny=0 nz=0
|
||||
RAW camera=r30_inward dir=1 theta=0.16812289429621627 cfg=tol1e-11_h2 outcome=1 reason=1 end=4294967295 stop_t=-212.59582609170599 steps=2180 rejected=0 rhs=15547 g=0 thr=8.0000000000000071 L=8.0658840955358091 L0=0.065884095535802364 nx=0 ny=0 nz=0
|
||||
RAW camera=r30_inward dir=1 theta=0.16812289429621627 cfg=tol1e-11_h8 outcome=1 reason=1 end=4294967295 stop_t=-212.59582609170599 steps=2180 rejected=0 rhs=15547 g=0 thr=8.0000000000000071 L=8.0658840955358091 L0=0.065884095535802364 nx=0 ny=0 nz=0
|
||||
RAW camera=r30_inward dir=2 theta=0.16812299429621627 cfg=ref_tol1e-12_h0.25 outcome=0 reason=0 end=0 stop_t=-370.18047830118235 steps=2790 rejected=1 rhs=19831 g=1.0350983390130453 thr=nan L=-0.038385896473527227 L0=0.065884094489054593 nx=-0.35873499147611138 ny=-6.5068267720987458e-16 nz=-0.9334394495041628
|
||||
RAW camera=r30_inward dir=2 theta=0.16812299429621627 cfg=ref_tol1e-13_h0.125 outcome=0 reason=0 end=0 stop_t=-370.1804778092 steps=4857 rejected=1 rhs=34300 g=1.035098339013504 thr=nan L=-0.038385896473972475 L0=0.065884094489054593 nx=-0.35873507984449715 ny=-6.5068265353608199e-16 nz=-0.93343941554284182
|
||||
RAW camera=r30_inward dir=2 theta=0.16812299429621627 cfg=tol1e-11_h2 outcome=0 reason=0 end=0 stop_t=-370.18048452857704 steps=1299 rejected=1 rhs=9387 g=1.0350983390054869 thr=nan L=-0.038385896466199748 L0=0.065884094489054593 nx=-0.3587338729380895 ny=-6.5068297686427377e-16 nz=-0.93343987937458439
|
||||
RAW camera=r30_inward dir=2 theta=0.16812299429621627 cfg=tol1e-11_h8 outcome=0 reason=0 end=0 stop_t=-370.1804845285946 steps=1257 rejected=1 rhs=9100 g=1.035098339005424 thr=nan L=-0.038385896466138665 L0=0.065884094489054593 nx=-0.35873387293809145 ny=-6.5068297686427416e-16 nz=-0.93343987937458361
|
||||
RAW camera=r100_inward dir=0 theta=0.051461896376274734 cfg=ref_tol1e-12_h0.25 outcome=1 reason=1 end=4294967295 stop_t=-211.027405235164 steps=2252 rejected=0 rhs=16051 g=0 thr=8.0000000000000266 L=8.0199767087115159 L0=0.01997670871149013 nx=0 ny=0 nz=0
|
||||
RAW camera=r100_inward dir=0 theta=0.051461896376274734 cfg=ref_tol1e-13_h0.125 outcome=1 reason=1 end=4294967295 stop_t=-211.02740538583069 steps=3727 rejected=0 rhs=26376 g=0 thr=8.0000000000000142 L=8.0199767087115035 L0=0.01997670871149013 nx=0 ny=0 nz=0
|
||||
RAW camera=r100_inward dir=0 theta=0.051461896376274734 cfg=tol1e-11_h2 outcome=1 reason=1 end=4294967295 stop_t=-211.02740354768991 steps=1292 rejected=0 rhs=9331 g=0 thr=8.0000000000000533 L=8.0199767087115426 L0=0.01997670871149013 nx=0 ny=0 nz=0
|
||||
RAW camera=r100_inward dir=0 theta=0.051461896376274734 cfg=tol1e-11_h8 outcome=1 reason=1 end=4294967295 stop_t=-211.02740354768991 steps=1292 rejected=0 rhs=9331 g=0 thr=8.0000000000000533 L=8.0199767087115426 L0=0.01997670871149013 nx=0 ny=0 nz=0
|
||||
RAW camera=r100_inward dir=1 theta=0.051461996376274736 cfg=ref_tol1e-12_h0.25 outcome=1 reason=1 end=4294967295 stop_t=-301.07740508539132 steps=4045 rejected=0 rhs=28602 g=0 thr=8.0000000000000018 L=8.0199767086106277 L0=0.019976708610626077 nx=0 ny=0 nz=0
|
||||
RAW camera=r100_inward dir=1 theta=0.051461996376274736 cfg=ref_tol1e-13_h0.125 outcome=1 reason=1 end=4294967295 stop_t=-313.77734009633099 steps=6986 rejected=0 rhs=49189 g=0 thr=8.0000000000000018 L=8.0199767086106277 L0=0.019976708610626077 nx=0 ny=0 nz=0
|
||||
RAW camera=r100_inward dir=1 theta=0.051461996376274736 cfg=tol1e-11_h2 outcome=1 reason=1 end=4294967295 stop_t=-288.21364790845217 steps=2256 rejected=0 rhs=16079 g=0 thr=8.0000000000000639 L=8.0199767086106899 L0=0.019976708610626077 nx=0 ny=0 nz=0
|
||||
RAW camera=r100_inward dir=1 theta=0.051461996376274736 cfg=tol1e-11_h8 outcome=1 reason=1 end=4294967295 stop_t=-288.21364790845217 steps=2256 rejected=0 rhs=16079 g=0 thr=8.0000000000000639 L=8.0199767086106899 L0=0.019976708610626077 nx=0 ny=0 nz=0
|
||||
RAW camera=r100_inward dir=2 theta=0.051462096376274739 cfg=ref_tol1e-12_h0.25 outcome=0 reason=0 end=0 stop_t=-439.31355204311825 steps=2969 rejected=0 rhs=21077 g=1.0101525445517785 thr=nan L=-0.013990814384499865 L0=0.019976708509762027 nx=-0.99110324423183982 ny=-3.1326762563025509e-16 nz=-0.13309530146899301
|
||||
RAW camera=r100_inward dir=2 theta=0.051462096376274739 cfg=ref_tol1e-13_h0.125 outcome=0 reason=0 end=0 stop_t=-439.31355190087947 steps=5265 rejected=0 rhs=37149 g=1.010152544552184 thr=nan L=-0.013990814384902493 L0=0.019976708509762027 nx=-0.99110324787406912 ny=-3.132675617927086e-16 nz=-0.13309527434688151
|
||||
RAW camera=r100_inward dir=2 theta=0.051462096376274739 cfg=tol1e-11_h2 outcome=0 reason=0 end=0 stop_t=-439.31355372933643 steps=1291 rejected=1 rhs=9338 g=1.010152544545182 thr=nan L=-0.013990814377948021 L0=0.019976708509762027 nx=-0.99110320105936889 ny=-3.1326838231562615e-16 nz=-0.13309562295534913
|
||||
RAW camera=r100_inward dir=2 theta=0.051462096376274739 cfg=tol1e-11_h8 outcome=0 reason=0 end=0 stop_t=-439.31355372935258 steps=1250 rejected=1 rhs=9051 g=1.0101525445451216 thr=nan L=-0.013990814377887956 L0=0.019976708509762027 nx=-0.991103201059369 ny=-3.1326838231562231e-16 nz=-0.13309562295534744
|
||||
RAW camera=r2p1_outward dir=0 theta=0.57037671003940071 cfg=ref_tol1e-12_h0.25 outcome=0 reason=0 end=0 stop_t=-333.45070432558816 steps=2639 rejected=1 rhs=18774 g=4.5825756949539365 thr=nan L=-1.5261506795942201 L0=-0.42981831573151047 nx=-0.30976840652656795 ny=0 nz=-0.95081203942629522
|
||||
RAW camera=r2p1_outward dir=0 theta=0.57037671003940071 cfg=ref_tol1e-13_h0.125 outcome=0 reason=0 end=0 stop_t=-333.45070506871724 steps=4589 rejected=2 rhs=32431 g=4.5825756949557528 thr=nan L=-1.5261506795946143 L0=-0.42981831573151047 nx=-0.30976827139480229 ny=0 nz=-0.95081208345133916
|
||||
RAW camera=r2p1_outward dir=0 theta=0.57037671003940071 cfg=tol1e-11_h2 outcome=0 reason=0 end=0 stop_t=-333.45070071486469 steps=1210 rejected=2 rhs=8778 g=4.5825756949192931 thr=nan L=-1.5261506795866686 L0=-0.42981831573151047 nx=-0.30976906608911198 ny=0 nz=-0.95081182454483582
|
||||
RAW camera=r2p1_outward dir=0 theta=0.57037671003940071 cfg=tol1e-11_h8 outcome=0 reason=0 end=0 stop_t=-333.45070071488124 steps=1169 rejected=2 rhs=8491 g=4.5825756949190151 thr=nan L=-1.5261506795866076 L0=-0.42981831573151047 nx=-0.30976906647032454 ny=0 nz=-0.95081182442063883
|
||||
RAW camera=r2p1_outward dir=1 theta=0.57037681003940066 cfg=ref_tol1e-12_h0.25 outcome=0 reason=0 end=0 stop_t=-414.94010328784253 steps=4263 rejected=2 rhs=30149 g=4.5825756949507124 thr=nan L=-1.5261506795930104 L0=-0.42981805651739968 nx=0.3336576345143959 ny=0 nz=0.94269432104487505
|
||||
RAW camera=r2p1_outward dir=1 theta=0.57037681003940066 cfg=ref_tol1e-13_h0.125 outcome=0 reason=0 end=0 stop_t=-427.08073320404128 steps=7560 rejected=1 rhs=53221 g=4.5825756949554943 thr=nan L=-1.5261506795940556 L0=-0.42981805651739968 nx=-0.91087431940825703 ny=0 nz=-0.41268386719442363
|
||||
RAW camera=r2p1_outward dir=1 theta=0.57037681003940066 cfg=tol1e-11_h2 outcome=0 reason=0 end=0 stop_t=-406.06581257014602 steps=2120 rejected=2 rhs=15141 g=4.58257569487448 thr=nan L=-1.5261506795763404 L0=-0.42981805651739968 nx=0.88820167266587602 ny=0 nz=-0.45945379383953305
|
||||
RAW camera=r2p1_outward dir=1 theta=0.57037681003940066 cfg=tol1e-11_h8 outcome=0 reason=0 end=0 stop_t=-406.06581257016262 steps=2078 rejected=2 rhs=14854 g=4.5825756948742002 thr=nan L=-1.5261506795762789 L0=-0.42981805651739968 nx=0.88817826517728515 ny=0 nz=-0.4594990416384655
|
||||
RAW camera=r2p1_outward dir=2 theta=0.57037691003940061 cfg=ref_tol1e-12_h0.25 outcome=1 reason=1 end=4294967295 stop_t=-109.41561097431348 steps=1950 rejected=1 rhs=13944 g=0 thr=8.0000000000000195 L=7.5701822026967047 L0=-0.42981779730331554 nx=0 ny=0 nz=0
|
||||
RAW camera=r2p1_outward dir=2 theta=0.57037691003940061 cfg=ref_tol1e-13_h0.125 outcome=1 reason=1 end=4294967295 stop_t=-109.41561022532379 steps=3098 rejected=1 rhs=21980 g=0 thr=8.000000000000016 L=7.5701822026967012 L0=-0.42981779730331554 nx=0 ny=0 nz=0
|
||||
RAW camera=r2p1_outward dir=2 theta=0.57037691003940061 cfg=tol1e-11_h2 outcome=1 reason=1 end=4294967295 stop_t=-109.41561457850582 steps=1228 rejected=1 rhs=8890 g=0 thr=8.0000000000000195 L=7.5701822026967038 L0=-0.42981779730331554 nx=0 ny=0 nz=0
|
||||
RAW camera=r2p1_outward dir=2 theta=0.57037691003940061 cfg=tol1e-11_h8 outcome=1 reason=1 end=4294967295 stop_t=-109.41561457850582 steps=1228 rejected=1 rhs=8890 g=0 thr=8.0000000000000195 L=7.5701822026967038 L0=-0.42981779730331554 nx=0 ny=0 nz=0
|
||||
CAPAIR camera=r30_inward dir=0 theta=0.16812279429621627 pair=ref_vs_tighter class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=4.8821473797033832e-07 dthr=-5.3290705182007514e-15 end=4294967295/4294967295
|
||||
CAPAIR camera=r30_inward dir=0 theta=0.16812279429621627 pair=h2_vs_h8 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=0 dthr=0 end=4294967295/4294967295
|
||||
CAPAIR camera=r30_inward dir=0 theta=0.16812279429621627 pair=ref_vs_h2 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=-6.2437596000108897e-06 dthr=-7.1054273576010019e-15 end=4294967295/4294967295
|
||||
CAPAIR camera=r30_inward dir=0 theta=0.16812279429621627 pair=ref_vs_h8 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=-6.2437596000108897e-06 dthr=-7.1054273576010019e-15 end=4294967295/4294967295
|
||||
CAPAIR camera=r30_inward dir=1 theta=0.16812289429621627 pair=ref_vs_tighter class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=13.056128311415392 dthr=1.7763568394002505e-14 end=4294967295/4294967295
|
||||
CAPAIR camera=r30_inward dir=1 theta=0.16812289429621627 pair=h2_vs_h8 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=0 dthr=0 end=4294967295/4294967295
|
||||
CAPAIR camera=r30_inward dir=1 theta=0.16812289429621627 pair=ref_vs_h2 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=-13.257108912477236 dthr=2.6645352591003757e-14 end=4294967295/4294967295
|
||||
CAPAIR camera=r30_inward dir=1 theta=0.16812289429621627 pair=ref_vs_h8 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=-13.257108912477236 dthr=2.6645352591003757e-14 end=4294967295/4294967295
|
||||
CAPAIR camera=r30_inward dir=2 theta=0.16812299429621627 pair=ref_vs_tighter class=ESC/ESC same=1 dn_ang=9.4669651562462453e-08 dgrel=4.4320103143036249e-13 dstop_t=-4.9198234819414211e-07 dthr=nan end=0/0
|
||||
CAPAIR camera=r30_inward dir=2 theta=0.16812299429621627 pair=h2_vs_h8 class=ESC/ESC same=1 dn_ang=2.0539125955565396e-15 dgrel=6.0618177144533547e-14 dstop_t=1.7564616427989677e-11 dthr=nan end=0/0
|
||||
CAPAIR camera=r30_inward dir=2 theta=0.16812299429621627 pair=ref_vs_h2 class=ESC/ESC same=1 dn_ang=1.198297077398556e-06 dgrel=7.3021588775645796e-12 dstop_t=6.2273946923596668e-06 dthr=nan end=0/0
|
||||
CAPAIR camera=r30_inward dir=2 theta=0.16812299429621627 pair=ref_vs_h8 class=ESC/ESC same=1 dn_ang=1.1982970752891323e-06 dgrel=7.3627770547091131e-12 dstop_t=6.2274122569760948e-06 dthr=nan end=0/0
|
||||
CAPAIR camera=r100_inward dir=0 theta=0.051461896376274734 pair=ref_vs_tighter class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=1.5066669334373728e-07 dthr=1.2434497875801753e-14 end=4294967295/4294967295
|
||||
CAPAIR camera=r100_inward dir=0 theta=0.051461896376274734 pair=h2_vs_h8 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=0 dthr=0 end=4294967295/4294967295
|
||||
CAPAIR camera=r100_inward dir=0 theta=0.051461896376274734 pair=ref_vs_h2 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=-1.6874740822458989e-06 dthr=-2.6645352591003757e-14 end=4294967295/4294967295
|
||||
CAPAIR camera=r100_inward dir=0 theta=0.051461896376274734 pair=ref_vs_h8 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=-1.6874740822458989e-06 dthr=-2.6645352591003757e-14 end=4294967295/4294967295
|
||||
CAPAIR camera=r100_inward dir=1 theta=0.051461996376274736 pair=ref_vs_tighter class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=12.699935010939669 dthr=0 end=4294967295/4294967295
|
||||
CAPAIR camera=r100_inward dir=1 theta=0.051461996376274736 pair=h2_vs_h8 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=0 dthr=0 end=4294967295/4294967295
|
||||
CAPAIR camera=r100_inward dir=1 theta=0.051461996376274736 pair=ref_vs_h2 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=-12.863757176939146 dthr=-6.2172489379008766e-14 end=4294967295/4294967295
|
||||
CAPAIR camera=r100_inward dir=1 theta=0.051461996376274736 pair=ref_vs_h8 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=-12.863757176939146 dthr=-6.2172489379008766e-14 end=4294967295/4294967295
|
||||
CAPAIR camera=r100_inward dir=2 theta=0.051462096376274739 pair=ref_vs_tighter class=ESC/ESC same=1 dn_ang=2.7365576305005138e-08 dgrel=4.0134562340199409e-13 dstop_t=-1.4223877542463015e-07 dthr=nan end=0/0
|
||||
CAPAIR camera=r100_inward dir=2 theta=0.051462096376274739 pair=h2_vs_h8 class=ESC/ESC same=1 dn_ang=1.6930901125533633e-15 dgrel=5.9729998724833422e-14 dstop_t=1.6143530956469476e-11 dthr=nan end=0/0
|
||||
CAPAIR camera=r100_inward dir=2 theta=0.051462096376274739 pair=ref_vs_h2 class=ESC/ESC same=1 dn_ang=3.243722235535319e-07 dgrel=6.5301097862402457e-12 dstop_t=1.6862181837495882e-06 dthr=nan end=0/0
|
||||
CAPAIR camera=r100_inward dir=2 theta=0.051462096376274739 pair=ref_vs_h8 class=ESC/ESC same=1 dn_ang=3.2437222186044184e-07 dgrel=6.5900618295700042e-12 dstop_t=1.6862343272805447e-06 dthr=nan end=0/0
|
||||
CAPAIR camera=r2p1_outward dir=0 theta=0.57037671003940071 pair=ref_vs_tighter class=ESC/ESC same=1 dn_ang=1.4212247739786624e-07 dgrel=3.9634961979118088e-13 dstop_t=7.4312907827334129e-07 dthr=nan end=0/0
|
||||
CAPAIR camera=r2p1_outward dir=0 theta=0.57037671003940071 pair=h2_vs_h8 class=ESC/ESC same=1 dn_ang=4.0093378617100928e-10 dgrel=6.0618177144533547e-14 dstop_t=1.6541434888495132e-11 dthr=nan end=0/0
|
||||
CAPAIR camera=r2p1_outward dir=0 theta=0.57037671003940071 pair=ref_vs_h2 class=ESC/ESC same=1 dn_ang=6.9368349486792499e-07 dgrel=7.5597306192776159e-12 dstop_t=-3.6107234677729139e-06 dthr=nan end=0/0
|
||||
CAPAIR camera=r2p1_outward dir=0 theta=0.57037671003940071 pair=ref_vs_h8 class=ESC/ESC same=1 dn_ang=6.9408442870960736e-07 dgrel=7.6205708410270745e-12 dstop_t=-3.6107069263380254e-06 dthr=nan end=0/0
|
||||
CAPAIR camera=r2p1_outward dir=1 theta=0.57037681003940066 pair=ref_vs_tighter class=ESC/ESC same=1 dn_ang=2.3363758065620761 dgrel=1.0434986208451846e-12 dstop_t=12.140629916198748 dthr=nan end=0/0
|
||||
CAPAIR camera=r2p1_outward dir=1 theta=0.57037681003940066 pair=h2_vs_h8 class=ESC/ESC same=1 dn_ang=5.0943830155578499e-05 dgrel=6.106226635438361e-14 dstop_t=1.659827830735594e-11 dthr=nan end=0/0
|
||||
CAPAIR camera=r2p1_outward dir=1 theta=0.57037681003940066 pair=ref_vs_h2 class=ESC/ESC same=1 dn_ang=1.7079955663413957 dgrel=1.6635359756378421e-11 dstop_t=-8.8742907176965105 dthr=nan end=0/0
|
||||
CAPAIR camera=r2p1_outward dir=1 theta=0.57037681003940066 pair=ref_vs_h8 class=ESC/ESC same=1 dn_ang=1.7080465101715514 dgrel=1.6696422022732804e-11 dstop_t=-8.8742907176799122 dthr=nan end=0/0
|
||||
CAPAIR camera=r2p1_outward dir=2 theta=0.57037691003940061 pair=ref_vs_tighter class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=-7.4898969160130946e-07 dthr=3.5527136788005009e-15 end=4294967295/4294967295
|
||||
CAPAIR camera=r2p1_outward dir=2 theta=0.57037691003940061 pair=h2_vs_h8 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=0 dthr=0 end=4294967295/4294967295
|
||||
CAPAIR camera=r2p1_outward dir=2 theta=0.57037691003940061 pair=ref_vs_h2 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=3.6041923436869183e-06 dthr=0 end=4294967295/4294967295
|
||||
CAPAIR camera=r2p1_outward dir=2 theta=0.57037691003940061 pair=ref_vs_h8 class=DARK/DARK same=1 dn_ang=nan dgrel=nan dstop_t=3.6041923436869183e-06 dthr=0 end=4294967295/4294967295
|
||||
EXACT_CRITICAL_DIRECTION camera=r30_inward theta=0.16812289429621627 ref0=DARK/1/4294967295 ref1=DARK/1/4294967295 same=1 dn_ang=nan dstop_t=13.056128311415392
|
||||
EXACT_CRITICAL_REFERENCE_NOT_CONVERGED camera=r30_inward dn_ang=nan dstop_t=13.056128311415392 class_same=1
|
||||
EXACT_CRITICAL_DIRECTION camera=r100_inward theta=0.051461996376274736 ref0=DARK/1/4294967295 ref1=DARK/1/4294967295 same=1 dn_ang=nan dstop_t=12.699935010939669
|
||||
EXACT_CRITICAL_REFERENCE_NOT_CONVERGED camera=r100_inward dn_ang=nan dstop_t=12.699935010939669 class_same=1
|
||||
EXACT_CRITICAL_DIRECTION camera=r2p1_outward theta=0.57037681003940066 ref0=ESC/0/0 ref1=ESC/0/0 same=1 dn_ang=2.3363758065620761 dstop_t=12.140629916198748
|
||||
EXACT_CRITICAL_REFERENCE_NOT_CONVERGED camera=r2p1_outward dn_ang=2.3363758065620761 dstop_t=12.140629916198748 class_same=1
|
||||
NEIGHBOR_REFERENCE_CHECK camera=r30_inward dir=0 theta=0.16812279429621627 ref_class0=DARK/1/4294967295 ref_class1=DARK/1/4294967295 same=1 clean=1 stepped=1 dn_ang=nan dgrel=nan dstop_t=4.8821473797033832e-07
|
||||
NEIGHBOR_REFERENCE_CHECK camera=r30_inward dir=2 theta=0.16812299429621627 ref_class0=ESC/0/0 ref_class1=ESC/0/0 same=1 clean=1 stepped=1 dn_ang=9.4669651562462453e-08 dgrel=4.4320103143036249e-13 dstop_t=-4.9198234819414211e-07
|
||||
NEIGHBOR_REFERENCE_CHECK camera=r100_inward dir=0 theta=0.051461896376274734 ref_class0=DARK/1/4294967295 ref_class1=DARK/1/4294967295 same=1 clean=1 stepped=1 dn_ang=nan dgrel=nan dstop_t=1.5066669334373728e-07
|
||||
NEIGHBOR_REFERENCE_CHECK camera=r100_inward dir=2 theta=0.051462096376274739 ref_class0=ESC/0/0 ref_class1=ESC/0/0 same=1 clean=1 stepped=1 dn_ang=2.7365576305005138e-08 dgrel=4.0134562340199409e-13 dstop_t=-1.4223877542463015e-07
|
||||
NEIGHBOR_REFERENCE_CHECK camera=r2p1_outward dir=0 theta=0.57037671003940071 ref_class0=ESC/0/0 ref_class1=ESC/0/0 same=1 clean=1 stepped=1 dn_ang=1.4212247739786624e-07 dgrel=3.9634961979118088e-13 dstop_t=7.4312907827334129e-07
|
||||
NEIGHBOR_REFERENCE_CHECK camera=r2p1_outward dir=2 theta=0.57037691003940061 ref_class0=DARK/1/4294967295 ref_class1=DARK/1/4294967295 same=1 clean=1 stepped=1 dn_ang=nan dgrel=nan dstop_t=-7.4898969160130946e-07
|
||||
CRITICAL_REFERENCE_CHECK status=0
|
||||
CRITICAL_REF_DONE
|
||||
|
||||
real 0m0.418s
|
||||
user 0m0.402s
|
||||
sys 0m0.016s
|
||||
+ set +x
|
||||
@@ -0,0 +1,271 @@
|
||||
### command: a_public schwarzschild
|
||||
+ /tmp/opencode/step_bounds/a_public schwarzschild
|
||||
REF r30_inward dir=0 theta=0 outcome=1 reason=1 stop_t=-69.5728394 steps=531 rejected=0 rhs=4004 g=0 thr=8
|
||||
REF r30_inward dir=1 theta=3.14159 outcome=0 reason=0 stop_t=-226 steps=905 rejected=0 rhs=6629 g=1.03509833901 thr=nan
|
||||
REF r30_inward dir=2 theta=1.5708 outcome=0 reason=0 stop_t=-256.70592 steps=1028 rejected=0 rhs=7490 g=1.03509833901 thr=nan
|
||||
REF r30_inward dir=3 theta=0.168123 outcome=1 reason=1 stop_t=-225.852935 steps=3746 rejected=0 rhs=26509 g=0 thr=8
|
||||
REF r30_inward dir=4 theta=0.167123 outcome=1 reason=1 stop_t=-94.2779103 steps=1127 rejected=0 rhs=8176 g=0 thr=8
|
||||
REF r30_inward dir=5 theta=0.169123 outcome=0 reason=0 stop_t=-322.366447 steps=1834 rejected=0 rhs=13132 g=1.03509833901 thr=nan
|
||||
REF r30_inward dir=6 theta=0.168113 outcome=1 reason=1 stop_t=-118.245807 steps=1606 rejected=0 rhs=11529 g=0 thr=8
|
||||
REF r30_inward dir=7 theta=0.168133 outcome=0 reason=0 stop_t=-346.252134 steps=2312 rejected=1 rhs=16485 g=1.03509833901 thr=nan
|
||||
REF r30_inward dir=8 theta=0.168123 outcome=1 reason=1 stop_t=-142.175748 steps=2081 rejected=0 rhs=14854 g=0 thr=8
|
||||
REF r30_inward dir=9 theta=0.168123 outcome=0 reason=0 stop_t=-370.180478 steps=2790 rejected=1 rhs=19831 g=1.03509833901 thr=nan
|
||||
REF r30_inward dir=10 theta=0.218123 outcome=0 reason=0 stop_t=-302.584521 steps=1409 rejected=1 rhs=10164 g=1.03509833901 thr=nan
|
||||
REF r30_inward dir=11 theta=0.118123 outcome=1 reason=1 stop_t=-73.7563113 steps=665 rejected=0 rhs=4942 g=0 thr=8
|
||||
REF r100_inward dir=0 theta=0 outcome=1 reason=1 stop_t=-144.299101 steps=830 rejected=0 rhs=6097 g=0 thr=8
|
||||
REF r100_inward dir=1 theta=3.14159 outcome=0 reason=0 stop_t=-156 steps=625 rejected=0 rhs=4669 g=1.01015254455 thr=nan
|
||||
REF r100_inward dir=2 theta=1.5708 outcome=0 reason=0 stop_t=-237.678408 steps=952 rejected=0 rhs=6958 g=1.01015254455 thr=nan
|
||||
REF r100_inward dir=3 theta=0.051462 outcome=1 reason=1 stop_t=-301.077405 steps=4045 rejected=0 rhs=28602 g=0 thr=8
|
||||
REF r100_inward dir=4 theta=0.050462 outcome=1 reason=1 stop_t=-163.061409 steps=1292 rejected=0 rhs=9331 g=0 thr=8
|
||||
REF r100_inward dir=5 theta=0.052462 outcome=0 reason=0 stop_t=-391.57927 steps=2014 rejected=1 rhs=14399 g=1.01015254455 thr=nan
|
||||
REF r100_inward dir=6 theta=0.051452 outcome=1 reason=1 stop_t=-187.095903 steps=1773 rejected=0 rhs=12698 g=0 thr=8
|
||||
REF r100_inward dir=7 theta=0.051472 outcome=0 reason=0 stop_t=-415.386875 steps=2493 rejected=0 rhs=17745 g=1.01015254455 thr=nan
|
||||
REF r100_inward dir=8 theta=0.0514619 outcome=1 reason=1 stop_t=-211.027405 steps=2252 rejected=0 rhs=16051 g=0 thr=8
|
||||
REF r100_inward dir=9 theta=0.0514621 outcome=0 reason=0 stop_t=-439.313552 steps=2969 rejected=0 rhs=21077 g=1.01015254455 thr=nan
|
||||
REF r100_inward dir=10 theta=0.101462 outcome=0 reason=0 stop_t=-372.348056 steps=1571 rejected=0 rhs=11291 g=1.01015254455 thr=nan
|
||||
REF r100_inward dir=11 theta=0.001462 outcome=1 reason=1 stop_t=-144.304446 steps=830 rejected=0 rhs=6097 g=0 thr=8
|
||||
REF r2p1_outward dir=0 theta=0 outcome=0 reason=0 stop_t=-253.9 steps=1120 rejected=1 rhs=8141 g=4.58257569496 thr=nan
|
||||
REF r2p1_outward dir=1 theta=3.14159 outcome=1 reason=1 stop_t=-32.2468847 steps=186 rejected=0 rhs=1589 g=0 thr=8
|
||||
REF r2p1_outward dir=2 theta=1.5708 outcome=1 reason=1 stop_t=-32.7725901 steps=316 rejected=1 rhs=2506 g=0 thr=8
|
||||
REF r2p1_outward dir=3 theta=0.570377 outcome=0 reason=0 stop_t=-414.940103 steps=4263 rejected=2 rhs=30149 g=4.58257569495 thr=nan
|
||||
REF r2p1_outward dir=4 theta=0.569377 outcome=0 reason=0 stop_t=-285.577403 steps=1686 rejected=1 rhs=12103 g=4.58257569496 thr=nan
|
||||
REF r2p1_outward dir=5 theta=0.571377 outcome=1 reason=1 stop_t=-61.5813727 steps=995 rejected=1 rhs=7259 g=0 thr=8
|
||||
REF r2p1_outward dir=6 theta=0.570367 outcome=0 reason=0 stop_t=-309.521289 steps=2162 rejected=2 rhs=15442 g=4.58257569495 thr=nan
|
||||
REF r2p1_outward dir=7 theta=0.570387 outcome=1 reason=1 stop_t=-85.4867841 steps=1474 rejected=1 rhs=10612 g=0 thr=8
|
||||
REF r2p1_outward dir=8 theta=0.570377 outcome=0 reason=0 stop_t=-333.450704 steps=2639 rejected=1 rhs=18774 g=4.58257569495 thr=nan
|
||||
REF r2p1_outward dir=9 theta=0.570377 outcome=1 reason=1 stop_t=-109.415611 steps=1950 rejected=1 rhs=13944 g=0 thr=8
|
||||
REF r2p1_outward dir=10 theta=0.620377 outcome=1 reason=1 stop_t=-41.9883684 steps=585 rejected=1 rhs=4389 g=0 thr=8
|
||||
REF r2p1_outward dir=11 theta=0.520377 outcome=0 reason=0 stop_t=-264.96182 steps=1303 rejected=2 rhs=9429 g=4.58257569496 thr=nan
|
||||
REF r1p5_freefall dir=0 theta=0 outcome=1 reason=1 stop_t=-30.6580907 steps=231 rejected=1 rhs=1911 g=0 thr=8
|
||||
REF r1p5_freefall dir=1 theta=1.5708 outcome=0 reason=0 stop_t=-255.249558 steps=1130 rejected=1 rhs=8211 g=1 thr=nan
|
||||
REF r1p5_freefall dir=2 theta=3.14159 outcome=0 reason=0 stop_t=-254.5 steps=1143 rejected=1 rhs=8302 g=0.464101615138 thr=nan
|
||||
REF r1p5_freefall dir=3 theta=2.35619 outcome=0 reason=0 stop_t=-254.612997 steps=1127 rejected=1 rhs=8190 g=0.550510257217 thr=nan
|
||||
SUMMARY upper r30_inward upper=0.25 min=1e-12 n=12 mismatch=0 max_dn_ang=8.66705e-05 max_dgrel=2.2616e-09 max_dstopT=35.0811 sum_rhs=76510 esc=6 dark=6 unres=0 inc=0 wall=0.041s
|
||||
SUMMARY upper r30_inward upper=0.5 min=1e-12 n=12 mismatch=0 max_dn_ang=0.00018656 max_dgrel=2.26833e-09 max_dstopT=39.0614 sum_rhs=49063 esc=6 dark=6 unres=0 inc=0 wall=0.027s
|
||||
SUMMARY upper r30_inward upper=1 min=1e-12 n=12 mismatch=0 max_dn_ang=0.000280143 max_dgrel=2.2658e-09 max_dstopT=41.1726 sum_rhs=36974 esc=6 dark=6 unres=0 inc=0 wall=0.020s
|
||||
SUMMARY upper r30_inward upper=2 min=1e-12 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24374e-09 max_dstopT=41.2044 sum_rhs=31843 esc=6 dark=6 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY upper r30_inward upper=4 min=1e-12 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24952e-09 max_dstopT=41.2044 sum_rhs=29617 esc=6 dark=6 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY upper r30_inward upper=8 min=1e-12 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.25767e-09 max_dstopT=41.2044 sum_rhs=28714 esc=6 dark=6 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY upper r30_inward upper=16 min=1e-12 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.26556e-09 max_dstopT=41.2044 sum_rhs=28455 esc=6 dark=6 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r30_inward upper=32 min=1e-12 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.26605e-09 max_dstopT=41.2044 sum_rhs=28434 esc=6 dark=6 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r30_inward upper=64 min=1e-12 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.26605e-09 max_dstopT=41.2044 sum_rhs=28434 esc=6 dark=6 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r100_inward upper=0.25 min=1e-12 n=12 mismatch=0 max_dn_ang=2.60363e-05 max_dgrel=2.04765e-09 max_dstopT=35.2041 sum_rhs=93464 esc=6 dark=6 unres=0 inc=0 wall=0.050s
|
||||
SUMMARY upper r100_inward upper=0.5 min=1e-12 n=12 mismatch=0 max_dn_ang=5.69583e-05 max_dgrel=2.05623e-09 max_dstopT=39.2691 sum_rhs=56595 esc=6 dark=6 unres=0 inc=0 wall=0.030s
|
||||
SUMMARY upper r100_inward upper=1 min=1e-12 n=12 mismatch=0 max_dn_ang=8.34774e-05 max_dgrel=2.05088e-09 max_dstopT=41.2546 sum_rhs=39788 esc=6 dark=6 unres=0 inc=0 wall=0.022s
|
||||
SUMMARY upper r100_inward upper=2 min=1e-12 n=12 mismatch=0 max_dn_ang=8.28604e-05 max_dgrel=2.0262e-09 max_dstopT=41.2161 sum_rhs=32389 esc=6 dark=6 unres=0 inc=0 wall=0.018s
|
||||
SUMMARY upper r100_inward upper=4 min=1e-12 n=12 mismatch=0 max_dn_ang=8.08898e-05 max_dgrel=2.02847e-09 max_dstopT=41.091 sum_rhs=29393 esc=6 dark=6 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY upper r100_inward upper=8 min=1e-12 n=12 mismatch=0 max_dn_ang=8.03365e-05 max_dgrel=2.03431e-09 max_dstopT=41.0553 sum_rhs=28427 esc=6 dark=6 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r100_inward upper=16 min=1e-12 n=12 mismatch=0 max_dn_ang=8.03365e-05 max_dgrel=2.04195e-09 max_dstopT=41.0553 sum_rhs=28189 esc=6 dark=6 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r100_inward upper=32 min=1e-12 n=12 mismatch=0 max_dn_ang=8.03365e-05 max_dgrel=2.04297e-09 max_dstopT=41.0553 sum_rhs=28182 esc=6 dark=6 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r100_inward upper=64 min=1e-12 n=12 mismatch=0 max_dn_ang=8.03365e-05 max_dgrel=2.04297e-09 max_dstopT=41.0553 sum_rhs=28182 esc=6 dark=6 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r2p1_outward upper=0.25 min=1e-12 n=12 mismatch=1 max_dn_ang=0.000287223 max_dgrel=2.66126e-09 max_dstopT=263.145 sum_rhs=62258 esc=5 dark=7 unres=0 inc=0 wall=0.034s
|
||||
SUMMARY upper r2p1_outward upper=0.5 min=1e-12 n=12 mismatch=1 max_dn_ang=0.000287221 max_dgrel=2.64443e-09 max_dstopT=263.145 sum_rhs=42490 esc=5 dark=7 unres=0 inc=0 wall=0.023s
|
||||
SUMMARY upper r2p1_outward upper=1 min=1e-12 n=12 mismatch=1 max_dn_ang=0.000287221 max_dgrel=2.61531e-09 max_dstopT=263.145 sum_rhs=33544 esc=5 dark=7 unres=0 inc=0 wall=0.019s
|
||||
SUMMARY upper r2p1_outward upper=2 min=1e-12 n=12 mismatch=1 max_dn_ang=0.000287222 max_dgrel=2.59243e-09 max_dstopT=263.145 sum_rhs=29421 esc=5 dark=7 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY upper r2p1_outward upper=4 min=1e-12 n=12 mismatch=1 max_dn_ang=0.000287221 max_dgrel=2.59774e-09 max_dstopT=263.145 sum_rhs=27580 esc=5 dark=7 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r2p1_outward upper=8 min=1e-12 n=12 mismatch=1 max_dn_ang=0.000287221 max_dgrel=2.60591e-09 max_dstopT=263.145 sum_rhs=26831 esc=5 dark=7 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r2p1_outward upper=16 min=1e-12 n=12 mismatch=1 max_dn_ang=0.000287223 max_dgrel=2.61374e-09 max_dstopT=263.145 sum_rhs=26614 esc=5 dark=7 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r2p1_outward upper=32 min=1e-12 n=12 mismatch=1 max_dn_ang=0.000287221 max_dgrel=2.6148e-09 max_dstopT=263.145 sum_rhs=26607 esc=5 dark=7 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r2p1_outward upper=64 min=1e-12 n=12 mismatch=1 max_dn_ang=0.000287221 max_dgrel=2.6148e-09 max_dstopT=263.145 sum_rhs=26607 esc=5 dark=7 unres=0 inc=0 wall=0.015s
|
||||
SUMMARY upper r1p5_freefall upper=0.25 min=1e-12 n=4 mismatch=0 max_dn_ang=1.00222e-10 max_dgrel=3.16466e-10 max_dstopT=2.6078e-08 sum_rhs=23597 esc=3 dark=1 unres=0 inc=0 wall=0.014s
|
||||
SUMMARY upper r1p5_freefall upper=0.5 min=1e-12 n=4 mismatch=0 max_dn_ang=8.87544e-11 max_dgrel=3.65847e-10 max_dstopT=3.08873e-08 sum_rhs=12747 esc=3 dark=1 unres=0 inc=0 wall=0.008s
|
||||
SUMMARY upper r1p5_freefall upper=1 min=1e-12 n=4 mismatch=0 max_dn_ang=8.18746e-11 max_dgrel=3.81078e-10 max_dstopT=2.81655e-08 sum_rhs=7553 esc=3 dark=1 unres=0 inc=0 wall=0.005s
|
||||
SUMMARY upper r1p5_freefall upper=2 min=1e-12 n=4 mismatch=0 max_dn_ang=8.165e-11 max_dgrel=3.7195e-10 max_dstopT=2.57141e-08 sum_rhs=5131 esc=3 dark=1 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY upper r1p5_freefall upper=4 min=1e-12 n=4 mismatch=0 max_dn_ang=8.1566e-11 max_dgrel=3.6318e-10 max_dstopT=2.34608e-08 sum_rhs=4039 esc=3 dark=1 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper r1p5_freefall upper=8 min=1e-12 n=4 mismatch=0 max_dn_ang=8.15091e-11 max_dgrel=3.54659e-10 max_dstopT=2.12507e-08 sum_rhs=3591 esc=3 dark=1 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper r1p5_freefall upper=16 min=1e-12 n=4 mismatch=0 max_dn_ang=8.14607e-11 max_dgrel=3.46852e-10 max_dstopT=1.92511e-08 sum_rhs=3465 esc=3 dark=1 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper r1p5_freefall upper=32 min=1e-12 n=4 mismatch=0 max_dn_ang=8.1455e-11 max_dgrel=3.45979e-10 max_dstopT=1.94793e-08 sum_rhs=3458 esc=3 dark=1 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper r1p5_freefall upper=64 min=1e-12 n=4 mismatch=0 max_dn_ang=8.1455e-11 max_dgrel=3.45979e-10 max_dstopT=1.94793e-08 sum_rhs=3458 esc=3 dark=1 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY min r30_inward upper=2 min=0.1 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24374e-09 max_dstopT=41.2044 sum_rhs=31843 esc=6 dark=6 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r30_inward upper=2 min=0.01 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24374e-09 max_dstopT=41.2044 sum_rhs=31843 esc=6 dark=6 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r30_inward upper=2 min=0.001 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24374e-09 max_dstopT=41.2044 sum_rhs=31843 esc=6 dark=6 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r30_inward upper=2 min=0.0001 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24374e-09 max_dstopT=41.2044 sum_rhs=31843 esc=6 dark=6 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r30_inward upper=2 min=1e-05 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24374e-09 max_dstopT=41.2044 sum_rhs=31843 esc=6 dark=6 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r30_inward upper=2 min=1e-06 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24374e-09 max_dstopT=41.2044 sum_rhs=31843 esc=6 dark=6 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r30_inward upper=2 min=1e-08 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24374e-09 max_dstopT=41.2044 sum_rhs=31843 esc=6 dark=6 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r30_inward upper=2 min=1e-10 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24374e-09 max_dstopT=41.2044 sum_rhs=31843 esc=6 dark=6 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r30_inward upper=2 min=1e-12 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24374e-09 max_dstopT=41.2044 sum_rhs=31843 esc=6 dark=6 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r30_inward upper=2 min=1e-14 n=12 mismatch=0 max_dn_ang=0.000281866 max_dgrel=2.24374e-09 max_dstopT=41.2044 sum_rhs=31843 esc=6 dark=6 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r100_inward upper=2 min=0.1 n=12 mismatch=0 max_dn_ang=8.28604e-05 max_dgrel=2.0262e-09 max_dstopT=41.2161 sum_rhs=32389 esc=6 dark=6 unres=0 inc=0 wall=0.018s
|
||||
SUMMARY min r100_inward upper=2 min=0.01 n=12 mismatch=0 max_dn_ang=8.28604e-05 max_dgrel=2.0262e-09 max_dstopT=41.2161 sum_rhs=32389 esc=6 dark=6 unres=0 inc=0 wall=0.018s
|
||||
SUMMARY min r100_inward upper=2 min=0.001 n=12 mismatch=0 max_dn_ang=8.28604e-05 max_dgrel=2.0262e-09 max_dstopT=41.2161 sum_rhs=32389 esc=6 dark=6 unres=0 inc=0 wall=0.018s
|
||||
SUMMARY min r100_inward upper=2 min=0.0001 n=12 mismatch=0 max_dn_ang=8.28604e-05 max_dgrel=2.0262e-09 max_dstopT=41.2161 sum_rhs=32389 esc=6 dark=6 unres=0 inc=0 wall=0.018s
|
||||
SUMMARY min r100_inward upper=2 min=1e-05 n=12 mismatch=0 max_dn_ang=8.28604e-05 max_dgrel=2.0262e-09 max_dstopT=41.2161 sum_rhs=32389 esc=6 dark=6 unres=0 inc=0 wall=0.018s
|
||||
SUMMARY min r100_inward upper=2 min=1e-06 n=12 mismatch=0 max_dn_ang=8.28604e-05 max_dgrel=2.0262e-09 max_dstopT=41.2161 sum_rhs=32389 esc=6 dark=6 unres=0 inc=0 wall=0.018s
|
||||
SUMMARY min r100_inward upper=2 min=1e-08 n=12 mismatch=0 max_dn_ang=8.28604e-05 max_dgrel=2.0262e-09 max_dstopT=41.2161 sum_rhs=32389 esc=6 dark=6 unres=0 inc=0 wall=0.018s
|
||||
SUMMARY min r100_inward upper=2 min=1e-10 n=12 mismatch=0 max_dn_ang=8.28604e-05 max_dgrel=2.0262e-09 max_dstopT=41.2161 sum_rhs=32389 esc=6 dark=6 unres=0 inc=0 wall=0.018s
|
||||
SUMMARY min r100_inward upper=2 min=1e-12 n=12 mismatch=0 max_dn_ang=8.28604e-05 max_dgrel=2.0262e-09 max_dstopT=41.2161 sum_rhs=32389 esc=6 dark=6 unres=0 inc=0 wall=0.018s
|
||||
SUMMARY min r100_inward upper=2 min=1e-14 n=12 mismatch=0 max_dn_ang=8.28604e-05 max_dgrel=2.0262e-09 max_dstopT=41.2161 sum_rhs=32389 esc=6 dark=6 unres=0 inc=0 wall=0.018s
|
||||
SUMMARY min r2p1_outward upper=2 min=0.1 n=12 mismatch=1 max_dn_ang=0.000287222 max_dgrel=2.59243e-09 max_dstopT=263.145 sum_rhs=29421 esc=5 dark=7 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY min r2p1_outward upper=2 min=0.01 n=12 mismatch=1 max_dn_ang=0.000287222 max_dgrel=2.59243e-09 max_dstopT=263.145 sum_rhs=29421 esc=5 dark=7 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY min r2p1_outward upper=2 min=0.001 n=12 mismatch=1 max_dn_ang=0.000287222 max_dgrel=2.59243e-09 max_dstopT=263.145 sum_rhs=29421 esc=5 dark=7 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r2p1_outward upper=2 min=0.0001 n=12 mismatch=1 max_dn_ang=0.000287222 max_dgrel=2.59243e-09 max_dstopT=263.145 sum_rhs=29421 esc=5 dark=7 unres=0 inc=0 wall=0.017s
|
||||
SUMMARY min r2p1_outward upper=2 min=1e-05 n=12 mismatch=1 max_dn_ang=0.000287222 max_dgrel=2.59243e-09 max_dstopT=263.145 sum_rhs=29421 esc=5 dark=7 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY min r2p1_outward upper=2 min=1e-06 n=12 mismatch=1 max_dn_ang=0.000287222 max_dgrel=2.59243e-09 max_dstopT=263.145 sum_rhs=29421 esc=5 dark=7 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY min r2p1_outward upper=2 min=1e-08 n=12 mismatch=1 max_dn_ang=0.000287222 max_dgrel=2.59243e-09 max_dstopT=263.145 sum_rhs=29421 esc=5 dark=7 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY min r2p1_outward upper=2 min=1e-10 n=12 mismatch=1 max_dn_ang=0.000287222 max_dgrel=2.59243e-09 max_dstopT=263.145 sum_rhs=29421 esc=5 dark=7 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY min r2p1_outward upper=2 min=1e-12 n=12 mismatch=1 max_dn_ang=0.000287222 max_dgrel=2.59243e-09 max_dstopT=263.145 sum_rhs=29421 esc=5 dark=7 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY min r2p1_outward upper=2 min=1e-14 n=12 mismatch=1 max_dn_ang=0.000287222 max_dgrel=2.59243e-09 max_dstopT=263.145 sum_rhs=29421 esc=5 dark=7 unres=0 inc=0 wall=0.016s
|
||||
SUMMARY min r1p5_freefall upper=2 min=0.1 n=4 mismatch=1 max_dn_ang=8.165e-11 max_dgrel=3.7195e-10 max_dstopT=254.3 sum_rhs=3654 esc=2 dark=1 unres=0 inc=1 wall=0.002s
|
||||
SUMMARY min r1p5_freefall upper=2 min=0.01 n=4 mismatch=0 max_dn_ang=8.165e-11 max_dgrel=3.7195e-10 max_dstopT=2.57141e-08 sum_rhs=5131 esc=3 dark=1 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY min r1p5_freefall upper=2 min=0.001 n=4 mismatch=0 max_dn_ang=8.165e-11 max_dgrel=3.7195e-10 max_dstopT=2.57141e-08 sum_rhs=5131 esc=3 dark=1 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY min r1p5_freefall upper=2 min=0.0001 n=4 mismatch=0 max_dn_ang=8.165e-11 max_dgrel=3.7195e-10 max_dstopT=2.57141e-08 sum_rhs=5131 esc=3 dark=1 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY min r1p5_freefall upper=2 min=1e-05 n=4 mismatch=0 max_dn_ang=8.165e-11 max_dgrel=3.7195e-10 max_dstopT=2.57141e-08 sum_rhs=5131 esc=3 dark=1 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY min r1p5_freefall upper=2 min=1e-06 n=4 mismatch=0 max_dn_ang=8.165e-11 max_dgrel=3.7195e-10 max_dstopT=2.57141e-08 sum_rhs=5131 esc=3 dark=1 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY min r1p5_freefall upper=2 min=1e-08 n=4 mismatch=0 max_dn_ang=8.165e-11 max_dgrel=3.7195e-10 max_dstopT=2.57141e-08 sum_rhs=5131 esc=3 dark=1 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY min r1p5_freefall upper=2 min=1e-10 n=4 mismatch=0 max_dn_ang=8.165e-11 max_dgrel=3.7195e-10 max_dstopT=2.57141e-08 sum_rhs=5131 esc=3 dark=1 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY min r1p5_freefall upper=2 min=1e-12 n=4 mismatch=0 max_dn_ang=8.165e-11 max_dgrel=3.7195e-10 max_dstopT=2.57141e-08 sum_rhs=5131 esc=3 dark=1 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY min r1p5_freefall upper=2 min=1e-14 n=4 mismatch=0 max_dn_ang=8.165e-11 max_dgrel=3.7195e-10 max_dstopT=2.57141e-08 sum_rhs=5131 esc=3 dark=1 unres=0 inc=0 wall=0.003s
|
||||
RK4 r30_inward dir=8 theta=0.168123 o01=1/1 o005=1/1 hhalve_dn=nan hhalve_dgrel=nan vsdp_dn=nan vsdp_dgrel=nan vsdp_class=1
|
||||
RK4 r30_inward dir=9 theta=0.168123 o01=0/0 o005=0/0 hhalve_dn=1.89584e-07 hhalve_dgrel=7.32747e-15 vsdp_dn=7.95167e-08 vsdp_dgrel=4.66294e-13 vsdp_class=1
|
||||
RK4 r30_inward dir=6 theta=0.168113 o01=1/1 o005=1/1 hhalve_dn=nan hhalve_dgrel=nan vsdp_dn=nan vsdp_dgrel=nan vsdp_class=1
|
||||
RK4 r30_inward dir=7 theta=0.168133 o01=0/0 o005=0/0 hhalve_dn=1.73965e-09 hhalve_dgrel=7.9492e-14 vsdp_dn=7.86496e-10 vsdp_dgrel=2.6934e-13 vsdp_class=1
|
||||
RK4 r2p1_outward dir=8 theta=0.570377 o01=0/0 o005=0/0 hhalve_dn=1.03961e-05 hhalve_dgrel=1.66234e-12 vsdp_dn=8.49321e-07 vsdp_dgrel=5.46896e-13 vsdp_class=1
|
||||
RK4 r2p1_outward dir=9 theta=0.570377 o01=1/1 o005=1/1 hhalve_dn=nan hhalve_dgrel=nan vsdp_dn=nan vsdp_dgrel=nan vsdp_class=1
|
||||
RK4 r2p1_outward dir=6 theta=0.570367 o01=0/0 o005=0/0 hhalve_dn=1.03971e-07 hhalve_dgrel=1.61182e-12 vsdp_dn=8.47692e-09 vsdp_dgrel=3.02647e-13 vsdp_class=1
|
||||
RK4 r2p1_outward dir=7 theta=0.570387 o01=1/1 o005=1/1 hhalve_dn=nan hhalve_dgrel=nan vsdp_dn=nan vsdp_dgrel=nan vsdp_class=1
|
||||
TOTAL_RAYS 816
|
||||
|
||||
real 0m2.428s
|
||||
user 0m2.423s
|
||||
sys 0m0.004s
|
||||
+ set +x
|
||||
### command: a_public minkowski
|
||||
+ /tmp/opencode/step_bounds/a_public minkowski
|
||||
SUMMARY mink upper=1 min=0.1 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=4886 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=1 min=1e-06 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=4886 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=1 min=1e-12 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=4886 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=4 min=0.1 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=2590 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=4 min=1e-06 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=2590 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=4 min=1e-12 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=2590 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=16 min=0.1 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=2037 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=16 min=1e-06 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=2037 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=16 min=1e-12 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=2037 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=64 min=0.1 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=1932 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=64 min=1e-06 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=1932 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=64 min=1e-12 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=1932 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=256 min=0.1 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=1932 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=256 min=1e-06 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=1932 esc=6 dark=0 unres=0 inc=0
|
||||
SUMMARY mink upper=256 min=1e-12 n=6 mismatch=0 max_dn_ang=0 max_dgrel=0 sum_rhs=1932 esc=6 dark=0 unres=0 inc=0
|
||||
TOTAL_RAYS 186
|
||||
|
||||
real 0m0.013s
|
||||
user 0m0.013s
|
||||
sys 0m0.000s
|
||||
+ set +x
|
||||
### command: a_public alcubierre
|
||||
+ /tmp/opencode/step_bounds/a_public alcubierre
|
||||
REF alc_v3_s1 dir=0 theta=nan outcome=0 reason=0 stop_t=-16.4338937 steps=347 rejected=1 rhs=2730 g=1.3 thr=nan
|
||||
REF alc_v3_s1 dir=1 theta=nan outcome=0 reason=0 stop_t=-29.3767055 steps=597 rejected=1 rhs=4480 g=0.7 thr=nan
|
||||
REF alc_v3_s1 dir=2 theta=nan outcome=0 reason=0 stop_t=-20.2190145 steps=414 rejected=0 rhs=3192 g=1 thr=nan
|
||||
REF alc_v3_s1 dir=3 theta=nan outcome=0 reason=0 stop_t=-20.2190145 steps=414 rejected=0 rhs=3192 g=1 thr=nan
|
||||
REF alc_v3_s1 dir=4 theta=nan outcome=0 reason=0 stop_t=-17.6897755 steps=367 rejected=0 rhs=2863 g=1.17815368048 thr=nan
|
||||
REF alc_v3_s1 dir=5 theta=nan outcome=0 reason=0 stop_t=-24.329102 steps=497 rejected=1 rhs=3780 g=0.822613315483 thr=nan
|
||||
REF alc_v3_s10 dir=0 theta=nan outcome=0 reason=0 stop_t=-2.53543426 steps=523 rejected=3 rhs=3976 g=1.3 thr=nan
|
||||
REF alc_v3_s10 dir=1 theta=nan outcome=0 reason=0 stop_t=-3.84949982 steps=775 rejected=0 rhs=5719 g=0.7 thr=nan
|
||||
REF alc_v3_s10 dir=2 theta=nan outcome=0 reason=0 stop_t=-2.94282517 steps=589 rejected=0 rhs=4417 g=1 thr=nan
|
||||
REF alc_v3_s10 dir=3 theta=nan outcome=0 reason=0 stop_t=-2.94282517 steps=589 rejected=0 rhs=4417 g=1 thr=nan
|
||||
REF alc_v3_s10 dir=4 theta=nan outcome=0 reason=0 stop_t=-2.67090915 steps=543 rejected=2 rhs=4109 g=1.17959135733 thr=nan
|
||||
REF alc_v3_s10 dir=5 theta=nan outcome=0 reason=0 stop_t=-3.3698049 steps=677 rejected=0 rhs=5033 g=0.820579506843 thr=nan
|
||||
REF alc_v9_s1 dir=0 theta=nan outcome=0 reason=0 stop_t=-11.5627491 steps=283 rejected=1 rhs=2282 g=1.9 thr=nan
|
||||
REF alc_v9_s1 dir=1 theta=nan outcome=0 reason=0 stop_t=-189.149503 steps=3825 rejected=1 rhs=27069 g=0.1 thr=nan
|
||||
REF alc_v9_s1 dir=2 theta=nan outcome=0 reason=0 stop_t=-16.1619146 steps=351 rejected=4 rhs=2772 g=1 thr=nan
|
||||
REF alc_v9_s1 dir=3 theta=nan outcome=0 reason=0 stop_t=-16.1619146 steps=351 rejected=4 rhs=2772 g=1 thr=nan
|
||||
REF alc_v9_s1 dir=4 theta=nan outcome=0 reason=0 stop_t=-13.0192142 steps=308 rejected=1 rhs=2457 g=1.5041731473 thr=nan
|
||||
REF alc_v9_s1 dir=5 theta=nan outcome=0 reason=0 stop_t=-22.987334 steps=491 rejected=1 rhs=3738 g=0.54079971046 thr=nan
|
||||
REF alc_v9_s10 dir=0 theta=nan outcome=0 reason=0 stop_t=-2.03742978 steps=452 rejected=5 rhs=3493 g=1.9 thr=nan
|
||||
REF alc_v9_s10 dir=1 theta=nan outcome=0 reason=0 stop_t=-19.9638367 steps=4013 rejected=0 rhs=28385 g=0.1 thr=nan
|
||||
REF alc_v9_s10 dir=2 theta=nan outcome=0 reason=0 stop_t=-2.62069451 steps=525 rejected=0 rhs=3969 g=1 thr=nan
|
||||
REF alc_v9_s10 dir=3 theta=nan outcome=0 reason=0 stop_t=-2.62069451 steps=525 rejected=0 rhs=3969 g=1 thr=nan
|
||||
REF alc_v9_s10 dir=4 theta=nan outcome=0 reason=0 stop_t=-2.20704191 steps=469 rejected=3 rhs=3598 g=1.5316539409 thr=nan
|
||||
REF alc_v9_s10 dir=5 theta=nan outcome=0 reason=0 stop_t=-3.67922549 steps=742 rejected=0 rhs=5488 g=0.483265790771 thr=nan
|
||||
REF alc_v9_s100 dir=0 theta=nan outcome=0 reason=0 stop_t=-1.10374298 steps=2252 rejected=5 rhs=16093 g=1.9 thr=nan
|
||||
REF alc_v9_s100 dir=1 theta=nan outcome=0 reason=0 stop_t=-2.89638367 steps=5813 rejected=0 rhs=40978 g=0.1 thr=nan
|
||||
REF alc_v9_s100 dir=2 theta=nan outcome=0 reason=0 stop_t=-1.18800796 steps=2377 rejected=0 rhs=16926 g=1 thr=nan
|
||||
REF alc_v9_s100 dir=3 theta=nan outcome=0 reason=0 stop_t=-1.18800796 steps=2377 rejected=0 rhs=16926 g=1 thr=nan
|
||||
REF alc_v9_s100 dir=4 theta=nan outcome=0 reason=0 stop_t=-1.12678339 steps=2281 rejected=2 rhs=16275 g=1.53910006629 thr=nan
|
||||
REF alc_v9_s100 dir=5 theta=nan outcome=0 reason=0 stop_t=-1.36694611 steps=2740 rejected=0 rhs=19474 g=0.462933441354 thr=nan
|
||||
SUMMARY upper alc_v3_s1 upper=0.05 min=0.0001 n=6 mismatch=0 max_dn_ang=7.54397e-14 max_dgrel=7.62723e-13 max_dstopT=1.98952e-13 sum_rhs=19740 esc=6 dark=0 unres=0 inc=0 wall=0.005s
|
||||
SUMMARY upper alc_v3_s1 upper=0.05 min=1e-08 n=6 mismatch=0 max_dn_ang=7.54397e-14 max_dgrel=7.62723e-13 max_dstopT=1.98952e-13 sum_rhs=19740 esc=6 dark=0 unres=0 inc=0 wall=0.005s
|
||||
SUMMARY upper alc_v3_s1 upper=0.05 min=1e-12 n=6 mismatch=0 max_dn_ang=7.54397e-14 max_dgrel=7.62723e-13 max_dstopT=1.98952e-13 sum_rhs=19740 esc=6 dark=0 unres=0 inc=0 wall=0.005s
|
||||
SUMMARY upper alc_v3_s1 upper=0.2 min=0.0001 n=6 mismatch=0 max_dn_ang=1.2079e-10 max_dgrel=3.45157e-10 max_dstopT=4.09095e-10 sum_rhs=6475 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=0.2 min=1e-08 n=6 mismatch=0 max_dn_ang=1.2079e-10 max_dgrel=3.45157e-10 max_dstopT=4.09095e-10 sum_rhs=6475 esc=6 dark=0 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper alc_v3_s1 upper=0.2 min=1e-12 n=6 mismatch=0 max_dn_ang=1.2079e-10 max_dgrel=3.45157e-10 max_dstopT=4.09095e-10 sum_rhs=6475 esc=6 dark=0 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper alc_v3_s1 upper=0.4 min=0.0001 n=6 mismatch=0 max_dn_ang=1.02989e-10 max_dgrel=3.46442e-10 max_dstopT=3.14323e-10 sum_rhs=4613 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=0.4 min=1e-08 n=6 mismatch=0 max_dn_ang=1.02989e-10 max_dgrel=3.46442e-10 max_dstopT=3.14323e-10 sum_rhs=4613 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=0.4 min=1e-12 n=6 mismatch=0 max_dn_ang=1.02989e-10 max_dgrel=3.46442e-10 max_dstopT=3.14323e-10 sum_rhs=4613 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=0.8 min=0.0001 n=6 mismatch=0 max_dn_ang=7.88763e-11 max_dgrel=7.95433e-10 max_dstopT=7.3689e-10 sum_rhs=3794 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=0.8 min=1e-08 n=6 mismatch=0 max_dn_ang=7.88763e-11 max_dgrel=7.95433e-10 max_dstopT=7.3689e-10 sum_rhs=3794 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=0.8 min=1e-12 n=6 mismatch=0 max_dn_ang=7.88763e-11 max_dgrel=7.95433e-10 max_dstopT=7.3689e-10 sum_rhs=3794 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=1.6 min=0.0001 n=6 mismatch=0 max_dn_ang=1.23935e-10 max_dgrel=1.11826e-09 max_dstopT=1.14768e-09 sum_rhs=3430 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=1.6 min=1e-08 n=6 mismatch=0 max_dn_ang=1.23935e-10 max_dgrel=1.11826e-09 max_dstopT=1.14768e-09 sum_rhs=3430 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=1.6 min=1e-12 n=6 mismatch=0 max_dn_ang=1.23935e-10 max_dgrel=1.11826e-09 max_dstopT=1.14768e-09 sum_rhs=3430 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=3.2 min=0.0001 n=6 mismatch=0 max_dn_ang=1.54539e-10 max_dgrel=1.25996e-09 max_dstopT=1.3457e-09 sum_rhs=3290 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=3.2 min=1e-08 n=6 mismatch=0 max_dn_ang=1.54539e-10 max_dgrel=1.25996e-09 max_dstopT=1.3457e-09 sum_rhs=3290 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s1 upper=3.2 min=1e-12 n=6 mismatch=0 max_dn_ang=1.54539e-10 max_dgrel=1.25996e-09 max_dstopT=1.3457e-09 sum_rhs=3290 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.005 min=0.0001 n=6 mismatch=0 max_dn_ang=5.82867e-15 max_dgrel=3.10862e-14 max_dstopT=4.66294e-14 sum_rhs=27412 esc=6 dark=0 unres=0 inc=0 wall=0.006s
|
||||
SUMMARY upper alc_v3_s10 upper=0.005 min=1e-08 n=6 mismatch=0 max_dn_ang=5.82867e-15 max_dgrel=3.10862e-14 max_dstopT=4.66294e-14 sum_rhs=27412 esc=6 dark=0 unres=0 inc=0 wall=0.006s
|
||||
SUMMARY upper alc_v3_s10 upper=0.005 min=1e-12 n=6 mismatch=0 max_dn_ang=5.82867e-15 max_dgrel=3.10862e-14 max_dstopT=4.66294e-14 sum_rhs=27412 esc=6 dark=0 unres=0 inc=0 wall=0.006s
|
||||
SUMMARY upper alc_v3_s10 upper=0.02 min=0.0001 n=6 mismatch=0 max_dn_ang=6.29929e-12 max_dgrel=2.40162e-10 max_dstopT=1.39897e-11 sum_rhs=8337 esc=6 dark=0 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper alc_v3_s10 upper=0.02 min=1e-08 n=6 mismatch=0 max_dn_ang=6.29929e-12 max_dgrel=2.40162e-10 max_dstopT=1.39897e-11 sum_rhs=8337 esc=6 dark=0 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper alc_v3_s10 upper=0.02 min=1e-12 n=6 mismatch=0 max_dn_ang=6.29929e-12 max_dgrel=2.40162e-10 max_dstopT=1.39897e-11 sum_rhs=8337 esc=6 dark=0 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper alc_v3_s10 upper=0.04 min=0.0001 n=6 mismatch=0 max_dn_ang=3.28758e-11 max_dgrel=3.85361e-10 max_dstopT=6.29403e-11 sum_rhs=5621 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.04 min=1e-08 n=6 mismatch=0 max_dn_ang=3.28758e-11 max_dgrel=3.85361e-10 max_dstopT=6.29403e-11 sum_rhs=5621 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.04 min=1e-12 n=6 mismatch=0 max_dn_ang=3.28758e-11 max_dgrel=3.85361e-10 max_dstopT=6.29403e-11 sum_rhs=5621 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.08 min=0.0001 n=6 mismatch=0 max_dn_ang=1.04151e-11 max_dgrel=2.78111e-10 max_dstopT=8.02363e-11 sum_rhs=4648 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.08 min=1e-08 n=6 mismatch=0 max_dn_ang=1.04151e-11 max_dgrel=2.78111e-10 max_dstopT=8.02363e-11 sum_rhs=4648 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.08 min=1e-12 n=6 mismatch=0 max_dn_ang=1.04151e-11 max_dgrel=2.78111e-10 max_dstopT=8.02363e-11 sum_rhs=4648 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.16 min=0.0001 n=6 mismatch=0 max_dn_ang=1.13121e-11 max_dgrel=7.59968e-10 max_dstopT=9.53793e-11 sum_rhs=4270 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.16 min=1e-08 n=6 mismatch=0 max_dn_ang=1.13121e-11 max_dgrel=7.59968e-10 max_dstopT=9.53793e-11 sum_rhs=4270 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.16 min=1e-12 n=6 mismatch=0 max_dn_ang=1.13121e-11 max_dgrel=7.59968e-10 max_dstopT=9.53793e-11 sum_rhs=4270 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.32 min=0.0001 n=6 mismatch=0 max_dn_ang=3.13081e-11 max_dgrel=9.77839e-10 max_dstopT=1.04124e-10 sum_rhs=4116 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.32 min=1e-08 n=6 mismatch=0 max_dn_ang=3.13081e-11 max_dgrel=9.77839e-10 max_dstopT=1.04124e-10 sum_rhs=4116 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v3_s10 upper=0.32 min=1e-12 n=6 mismatch=0 max_dn_ang=3.13081e-11 max_dgrel=9.77839e-10 max_dstopT=1.04124e-10 sum_rhs=4116 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s1 upper=0.05 min=0.0001 n=6 mismatch=0 max_dn_ang=6.63192e-13 max_dgrel=2.59086e-11 max_dstopT=1.38662e-11 sum_rhs=39452 esc=6 dark=0 unres=0 inc=0 wall=0.010s
|
||||
SUMMARY upper alc_v9_s1 upper=0.05 min=1e-08 n=6 mismatch=0 max_dn_ang=6.63192e-13 max_dgrel=2.59086e-11 max_dstopT=1.38662e-11 sum_rhs=39452 esc=6 dark=0 unres=0 inc=0 wall=0.010s
|
||||
SUMMARY upper alc_v9_s1 upper=0.05 min=1e-12 n=6 mismatch=0 max_dn_ang=6.63192e-13 max_dgrel=2.59086e-11 max_dstopT=1.38662e-11 sum_rhs=39452 esc=6 dark=0 unres=0 inc=0 wall=0.010s
|
||||
SUMMARY upper alc_v9_s1 upper=0.2 min=0.0001 n=6 mismatch=0 max_dn_ang=1.07764e-10 max_dgrel=2.07282e-09 max_dstopT=6.80462e-10 sum_rhs=11690 esc=6 dark=0 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY upper alc_v9_s1 upper=0.2 min=1e-08 n=6 mismatch=0 max_dn_ang=1.07764e-10 max_dgrel=2.07282e-09 max_dstopT=6.80462e-10 sum_rhs=11690 esc=6 dark=0 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY upper alc_v9_s1 upper=0.2 min=1e-12 n=6 mismatch=0 max_dn_ang=1.07764e-10 max_dgrel=2.07282e-09 max_dstopT=6.80462e-10 sum_rhs=11690 esc=6 dark=0 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY upper alc_v9_s1 upper=0.4 min=0.0001 n=6 mismatch=0 max_dn_ang=6.25e-11 max_dgrel=2.46644e-09 max_dstopT=1.08309e-09 sum_rhs=7413 esc=6 dark=0 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper alc_v9_s1 upper=0.4 min=1e-08 n=6 mismatch=0 max_dn_ang=6.25e-11 max_dgrel=2.46644e-09 max_dstopT=1.08309e-09 sum_rhs=7413 esc=6 dark=0 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper alc_v9_s1 upper=0.4 min=1e-12 n=6 mismatch=0 max_dn_ang=6.25e-11 max_dgrel=2.46644e-09 max_dstopT=1.08309e-09 sum_rhs=7413 esc=6 dark=0 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper alc_v9_s1 upper=0.8 min=0.0001 n=6 mismatch=0 max_dn_ang=5.34924e-11 max_dgrel=2.71772e-09 max_dstopT=1.1859e-09 sum_rhs=5369 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s1 upper=0.8 min=1e-08 n=6 mismatch=0 max_dn_ang=5.34924e-11 max_dgrel=2.71772e-09 max_dstopT=1.1859e-09 sum_rhs=5369 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s1 upper=0.8 min=1e-12 n=6 mismatch=0 max_dn_ang=5.34924e-11 max_dgrel=2.71772e-09 max_dstopT=1.1859e-09 sum_rhs=5369 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s1 upper=1.6 min=0.0001 n=6 mismatch=0 max_dn_ang=1.03537e-10 max_dgrel=2.8194e-09 max_dstopT=9.54927e-10 sum_rhs=4431 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s1 upper=1.6 min=1e-08 n=6 mismatch=0 max_dn_ang=1.03537e-10 max_dgrel=2.8194e-09 max_dstopT=9.54927e-10 sum_rhs=4431 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s1 upper=1.6 min=1e-12 n=6 mismatch=0 max_dn_ang=1.03537e-10 max_dgrel=2.8194e-09 max_dstopT=9.54927e-10 sum_rhs=4431 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s1 upper=3.2 min=0.0001 n=6 mismatch=0 max_dn_ang=1.23927e-10 max_dgrel=2.82251e-09 max_dstopT=3.24928e-09 sum_rhs=3983 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s1 upper=3.2 min=1e-08 n=6 mismatch=0 max_dn_ang=1.23927e-10 max_dgrel=2.82251e-09 max_dstopT=3.24928e-09 sum_rhs=3983 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s1 upper=3.2 min=1e-12 n=6 mismatch=0 max_dn_ang=1.23927e-10 max_dgrel=2.82251e-09 max_dstopT=3.24928e-09 sum_rhs=3983 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s10 upper=0.005 min=0.0001 n=6 mismatch=0 max_dn_ang=8.9373e-14 max_dgrel=1.10281e-11 max_dstopT=3.55271e-13 sum_rhs=48167 esc=6 dark=0 unres=0 inc=0 wall=0.011s
|
||||
SUMMARY upper alc_v9_s10 upper=0.005 min=1e-08 n=6 mismatch=0 max_dn_ang=8.9373e-14 max_dgrel=1.10281e-11 max_dstopT=3.55271e-13 sum_rhs=48167 esc=6 dark=0 unres=0 inc=0 wall=0.011s
|
||||
SUMMARY upper alc_v9_s10 upper=0.005 min=1e-12 n=6 mismatch=0 max_dn_ang=8.9373e-14 max_dgrel=1.10281e-11 max_dstopT=3.55271e-13 sum_rhs=48167 esc=6 dark=0 unres=0 inc=0 wall=0.011s
|
||||
SUMMARY upper alc_v9_s10 upper=0.02 min=0.0001 n=6 mismatch=0 max_dn_ang=5.33142e-11 max_dgrel=6.90633e-10 max_dstopT=1.09151e-10 sum_rhs=13692 esc=6 dark=0 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY upper alc_v9_s10 upper=0.02 min=1e-08 n=6 mismatch=0 max_dn_ang=5.33142e-11 max_dgrel=6.90633e-10 max_dstopT=1.09151e-10 sum_rhs=13692 esc=6 dark=0 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY upper alc_v9_s10 upper=0.02 min=1e-12 n=6 mismatch=0 max_dn_ang=5.33142e-11 max_dgrel=6.90633e-10 max_dstopT=1.09151e-10 sum_rhs=13692 esc=6 dark=0 unres=0 inc=0 wall=0.003s
|
||||
SUMMARY upper alc_v9_s10 upper=0.04 min=0.0001 n=6 mismatch=0 max_dn_ang=1.75204e-10 max_dgrel=9.74943e-10 max_dstopT=3.64615e-10 sum_rhs=8484 esc=6 dark=0 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper alc_v9_s10 upper=0.04 min=1e-08 n=6 mismatch=0 max_dn_ang=1.75204e-10 max_dgrel=9.74943e-10 max_dstopT=3.64615e-10 sum_rhs=8484 esc=6 dark=0 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper alc_v9_s10 upper=0.04 min=1e-12 n=6 mismatch=0 max_dn_ang=1.75204e-10 max_dgrel=9.74943e-10 max_dstopT=3.64615e-10 sum_rhs=8484 esc=6 dark=0 unres=0 inc=0 wall=0.002s
|
||||
SUMMARY upper alc_v9_s10 upper=0.08 min=0.0001 n=6 mismatch=0 max_dn_ang=1.1957e-10 max_dgrel=1.45708e-09 max_dstopT=2.69508e-10 sum_rhs=6251 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s10 upper=0.08 min=1e-08 n=6 mismatch=0 max_dn_ang=1.1957e-10 max_dgrel=1.45708e-09 max_dstopT=2.69508e-10 sum_rhs=6251 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s10 upper=0.08 min=1e-12 n=6 mismatch=0 max_dn_ang=1.1957e-10 max_dgrel=1.45708e-09 max_dstopT=2.69508e-10 sum_rhs=6251 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s10 upper=0.16 min=0.0001 n=6 mismatch=0 max_dn_ang=1.72733e-11 max_dgrel=1.07679e-09 max_dstopT=1.26013e-10 sum_rhs=5278 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s10 upper=0.16 min=1e-08 n=6 mismatch=0 max_dn_ang=1.72733e-11 max_dgrel=1.07679e-09 max_dstopT=1.26013e-10 sum_rhs=5278 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s10 upper=0.16 min=1e-12 n=6 mismatch=0 max_dn_ang=1.72733e-11 max_dgrel=1.07679e-09 max_dstopT=1.26013e-10 sum_rhs=5278 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s10 upper=0.32 min=0.0001 n=6 mismatch=0 max_dn_ang=5.49931e-11 max_dgrel=8.67977e-10 max_dstopT=2.55501e-10 sum_rhs=4872 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s10 upper=0.32 min=1e-08 n=6 mismatch=0 max_dn_ang=5.49931e-11 max_dgrel=8.67977e-10 max_dstopT=2.55501e-10 sum_rhs=4872 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY upper alc_v9_s10 upper=0.32 min=1e-12 n=6 mismatch=0 max_dn_ang=5.49931e-11 max_dgrel=8.67977e-10 max_dstopT=2.55501e-10 sum_rhs=4872 esc=6 dark=0 unres=0 inc=0 wall=0.001s
|
||||
SUMMARY min_stress alc_v9_s100 upper=0.004 min=0.0001 n=6 mismatch=0 max_dn_ang=1.69451e-11 max_dgrel=1.33161e-09 max_dstopT=1.05733e-11 sum_rhs=18095 esc=6 dark=0 unres=0 inc=0 wall=0.004s
|
||||
SUMMARY min_stress alc_v9_s100 upper=0.004 min=1e-05 n=6 mismatch=0 max_dn_ang=1.69451e-11 max_dgrel=1.33161e-09 max_dstopT=1.05733e-11 sum_rhs=18095 esc=6 dark=0 unres=0 inc=0 wall=0.004s
|
||||
SUMMARY min_stress alc_v9_s100 upper=0.004 min=1e-06 n=6 mismatch=0 max_dn_ang=1.69451e-11 max_dgrel=1.33161e-09 max_dstopT=1.05733e-11 sum_rhs=18095 esc=6 dark=0 unres=0 inc=0 wall=0.004s
|
||||
SUMMARY min_stress alc_v9_s100 upper=0.004 min=1e-08 n=6 mismatch=0 max_dn_ang=1.69451e-11 max_dgrel=1.33161e-09 max_dstopT=1.05733e-11 sum_rhs=18095 esc=6 dark=0 unres=0 inc=0 wall=0.004s
|
||||
SUMMARY min_stress alc_v9_s100 upper=0.004 min=1e-12 n=6 mismatch=0 max_dn_ang=1.69451e-11 max_dgrel=1.33161e-09 max_dstopT=1.05733e-11 sum_rhs=18095 esc=6 dark=0 unres=0 inc=0 wall=0.004s
|
||||
SUMMARY min_stress alc_v9_s100 upper=0.004 min=1e-14 n=6 mismatch=0 max_dn_ang=1.69451e-11 max_dgrel=1.33161e-09 max_dstopT=1.05733e-11 sum_rhs=18095 esc=6 dark=0 unres=0 inc=0 wall=0.004s
|
||||
TOTAL_RAYS 498
|
||||
|
||||
real 0m0.264s
|
||||
user 0m0.254s
|
||||
sys 0m0.010s
|
||||
+ set +x
|
||||
@@ -0,0 +1,33 @@
|
||||
### command: b_actual
|
||||
+ /tmp/opencode/step_bounds/b_actual
|
||||
B r30_inward dir=0 ref=1 refstop=-69.5728394 span=69.5728 T=20 target=-20 steps=17 reached=1 term=-1 h=[0.1,1.72575] first=0.1 last=0.839319 boundary=1 rhs=119 rej=0 nullmax=3.01e-12 final_t=-20 wall=0.0001s
|
||||
B r30_inward dir=1 ref=0 refstop=-226 span=226 T=20 target=-20 steps=13 reached=1 term=-1 h=[0.1,2] first=0.1 last=0.123959 boundary=1 rhs=91 rej=0 nullmax=8.69e-12 final_t=-20 wall=0.0001s
|
||||
B r30_inward dir=2 ref=1 refstop=-142.175748 span=142.176 T=20 target=-20 steps=20 reached=1 term=-1 h=[0.1,1.40832] first=0.1 last=0.637699 boundary=1 rhs=140 rej=0 nullmax=1.53e-11 final_t=-20 wall=0.0001s
|
||||
B r30_inward dir=3 ref=0 refstop=-370.180478 span=370.18 T=20 target=-20 steps=20 reached=1 term=-1 h=[0.1,1.40832] first=0.1 last=0.6377 boundary=1 rhs=140 rej=0 nullmax=1.53e-11 final_t=-20 wall=0.0001s
|
||||
B r30_inward dir=4 ref=1 refstop=-118.245807 span=118.246 T=20 target=-20 steps=20 reached=1 term=-1 h=[0.1,1.40833] first=0.1 last=0.637634 boundary=1 rhs=140 rej=0 nullmax=1.53e-11 final_t=-20 wall=0.0001s
|
||||
B r30_inward dir=5 ref=0 refstop=-346.252134 span=346.252 T=20 target=-20 steps=20 reached=1 term=-1 h=[0.1,1.40831] first=0.1 last=0.637765 boundary=1 rhs=140 rej=0 nullmax=1.53e-11 final_t=-20 wall=0.0001s
|
||||
B r100_inward dir=0 ref=1 refstop=-144.299101 span=144.299 T=20 target=-20 steps=12 reached=1 term=-1 h=[0.1,2] first=0.1 last=1.4 boundary=1 rhs=84 rej=0 nullmax=1.45e-14 final_t=-20 wall=0.0001s
|
||||
B r100_inward dir=1 ref=0 refstop=-156 span=156 T=20 target=-20 steps=12 reached=1 term=-1 h=[0.1,2] first=0.1 last=1.4 boundary=1 rhs=84 rej=0 nullmax=7.66e-15 final_t=-20 wall=0.0001s
|
||||
B r100_inward dir=2 ref=1 refstop=-301.077405 span=301.077 T=20 target=-20 steps=12 reached=1 term=-1 h=[0.1,2] first=0.1 last=1.4 boundary=1 rhs=84 rej=0 nullmax=1.4e-14 final_t=-20 wall=0.0001s
|
||||
B r100_inward dir=3 ref=1 refstop=-211.027405 span=211.027 T=20 target=-20 steps=12 reached=1 term=-1 h=[0.1,2] first=0.1 last=1.4 boundary=1 rhs=84 rej=0 nullmax=1.32e-14 final_t=-20 wall=0.0001s
|
||||
B r2p1_outward dir=0 ref=0 refstop=-253.9 span=253.9 T=20 target=-20 steps=46 reached=1 term=-1 h=[0.1,1.0708] first=0.1 last=1.06594 boundary=1 rhs=322 rej=0 nullmax=6.27e-11 final_t=-20 wall=0.0002s
|
||||
B r2p1_outward dir=1 ref=0 refstop=-414.940103 span=414.94 T=20 target=-20 steps=105 reached=1 term=-1 h=[0.1,0.211533] first=0.1 last=0.192781 boundary=1 rhs=735 rej=0 nullmax=4.7e-11 final_t=-20 wall=0.0005s
|
||||
B r2p1_outward dir=2 ref=0 refstop=-333.450704 span=333.451 T=20 target=-20 steps=105 reached=1 term=-1 h=[0.1,0.211533] first=0.1 last=0.192739 boundary=1 rhs=735 rej=0 nullmax=4.7e-11 final_t=-20 wall=0.0005s
|
||||
B r2p1_outward dir=3 ref=1 refstop=-109.415611 span=109.416 T=20 target=-20 steps=105 reached=1 term=-1 h=[0.1,0.211532] first=0.1 last=0.192823 boundary=1 rhs=735 rej=0 nullmax=4.7e-11 final_t=-20 wall=0.0005s
|
||||
B r2p1_outward dir=4 ref=1 refstop=-32.2468847 span=32.2469 T=20 target=-20 steps=37 reached=1 term=-1 h=[0.1,0.899361] first=0.1 last=0.332712 boundary=1 rhs=259 rej=0 nullmax=2.99e-11 final_t=-20 wall=0.0002s
|
||||
B r1p5_freefall dir=0 ref=1 refstop=-30.6580907 span=30.6581 T=20 target=-20 steps=49 reached=1 term=-1 h=[0.1,0.695968] first=0.1 last=0.106174 boundary=1 rhs=343 rej=0 nullmax=4.94e-10 final_t=-20 wall=0.0002s
|
||||
B r1p5_freefall dir=1 ref=0 refstop=-254.5 span=254.5 T=20 target=-20 steps=52 reached=1 term=-1 h=[0.0920967,1.08419] first=0.1 last=0.22147 boundary=1 rhs=364 rej=0 nullmax=4.03e-11 final_t=-20 wall=0.0002s
|
||||
B mink_moving dir=0 ref=0 refstop=-51.2640254 span=51.264 T=20 target=-20 steps=3 reached=1 term=-1 h=[1,14] first=1 last=14 boundary=1 rhs=21 rej=0 nullmax=2.22e-16 final_t=-20 wall=0.0000s
|
||||
B mink_moving dir=1 ref=0 refstop=-71.5846741 span=71.5847 T=20 target=-20 steps=3 reached=1 term=-1 h=[1,14] first=1 last=14 boundary=1 rhs=21 rej=0 nullmax=0 final_t=-20 wall=0.0000s
|
||||
B alc_v3_s1 dir=0 ref=0 refstop=-16.4338937 span=16.4339 T=16.4339 target=-16.4339 steps=56 reached=1 term=-1 h=[0.05,0.4] first=0.05 last=0.203538 boundary=1 rhs=406 rej=2 nullmax=0 final_t=-16.4338937 wall=0.0001s
|
||||
B alc_v3_s1 dir=1 ref=0 refstop=-29.3767055 span=29.3767 T=20 target=-20 steps=62 reached=1 term=-1 h=[0.05,0.4] first=0.05 last=0.27784 boundary=1 rhs=441 rej=1 nullmax=0 final_t=-20 wall=0.0001s
|
||||
B alc_v9_s10 dir=0 ref=0 refstop=-2.03742978 span=2.03743 T=2.03743 target=-2.03743 steps=77 reached=1 term=-1 h=[0.005,0.04] first=0.005 last=0.0388523 boundary=1 rhs=588 rej=7 nullmax=0 final_t=-2.03742978 wall=0.0001s
|
||||
B alc_v9_s10 dir=1 ref=0 refstop=-19.9638367 span=19.9638 T=19.9638 target=-19.9638 steps=521 reached=1 term=-1 h=[0.005,0.04] first=0.005 last=0.0365282 boundary=1 rhs=3682 rej=5 nullmax=2.22e-16 final_t=-19.9638367 wall=0.0009s
|
||||
B alc_v9_s100 dir=0 ref=0 refstop=-1.10374298 span=1.10374 T=1.10374 target=-1.10374 steps=302 reached=1 term=-1 h=[0.0005,0.004] first=0.0005 last=0.00388798 boundary=1 rhs=2163 rej=7 nullmax=0 final_t=-1.10374298 wall=0.0005s
|
||||
B alc_v9_s100 dir=1 ref=0 refstop=-2.89638367 span=2.89638 T=2.89638 target=-2.89638 steps=746 reached=1 term=-1 h=[0.0005,0.004] first=0.0005 last=0.00365282 boundary=1 rhs=5257 rej=5 nullmax=2.22e-16 final_t=-2.89638367 wall=0.0012s
|
||||
TOTAL_OBSERVED_STEPS 2427
|
||||
|
||||
real 0m0.152s
|
||||
user 0m0.145s
|
||||
sys 0m0.006s
|
||||
+ set +x
|
||||
@@ -0,0 +1,142 @@
|
||||
{
|
||||
"r100_tight_reference": {
|
||||
"vertices": 3158,
|
||||
"triangles": 6188,
|
||||
"outcomes": {
|
||||
"0": 2906,
|
||||
"1": 252
|
||||
},
|
||||
"reasons": {
|
||||
"0": 2906,
|
||||
"1": 252
|
||||
},
|
||||
"accepted": 2908050,
|
||||
"rejected": 1963,
|
||||
"rhs": 21294763,
|
||||
"accepted_percentiles": {
|
||||
"0": 659,
|
||||
"0.5": 885,
|
||||
"0.9": 1166,
|
||||
"0.99": 1410,
|
||||
"1": 1609
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 0,
|
||||
"0.5": 0,
|
||||
"0.9": 2,
|
||||
"0.99": 3,
|
||||
"1": 4
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 4900,
|
||||
"0.5": 6496,
|
||||
"0.9": 8463,
|
||||
"0.99": 10171,
|
||||
"1": 11564
|
||||
},
|
||||
"sha256": "a4f7def4212a7dae2b6290fd8635a5f1b087e11b0f8043e60e48fec71ecdb6e4",
|
||||
"wall_seconds": 2.6278538939077407
|
||||
},
|
||||
"r100_ref_vs_0.5": {
|
||||
"shared": 3158,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 6.236425088081268e-08,
|
||||
"max_logg_difference": 8.506182824080666e-10
|
||||
},
|
||||
"r100_ref_vs_2": {
|
||||
"shared": 3158,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 9.216337364737666e-08,
|
||||
"max_logg_difference": 8.199086565935376e-10
|
||||
},
|
||||
"r100_ref_vs_8": {
|
||||
"shared": 3158,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 8.743723551600822e-08,
|
||||
"max_logg_difference": 8.257244662329688e-10
|
||||
},
|
||||
"r100_ref_vs_32": {
|
||||
"shared": 3158,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 8.743704837242435e-08,
|
||||
"max_logg_difference": 8.34318713074933e-10
|
||||
},
|
||||
"r2p1_tight_reference": {
|
||||
"vertices": 5496,
|
||||
"triangles": 10816,
|
||||
"outcomes": {
|
||||
"1": 1336,
|
||||
"0": 4160
|
||||
},
|
||||
"reasons": {
|
||||
"1": 1336,
|
||||
"0": 4160
|
||||
},
|
||||
"accepted": 4515098,
|
||||
"rejected": 8672,
|
||||
"rhs": 33269502,
|
||||
"accepted_percentiles": {
|
||||
"0": 419,
|
||||
"0.5": 805,
|
||||
"0.9": 1034,
|
||||
"0.99": 1253,
|
||||
"1": 1860
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 1,
|
||||
"0.5": 2,
|
||||
"0.9": 2,
|
||||
"0.99": 3,
|
||||
"1": 3
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 3227,
|
||||
"0.5": 5936,
|
||||
"0.9": 7546,
|
||||
"0.99": 9072,
|
||||
"1": 13328
|
||||
},
|
||||
"sha256": "a81aac81cff2891627e21c22998ceb51d65ef779bb013922cadeb97140274cba",
|
||||
"wall_seconds": 3.180392162874341
|
||||
},
|
||||
"r2p1_ref_vs_0.5": {
|
||||
"shared": 5496,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 1.4772143877471049e-05,
|
||||
"max_logg_difference": 2.098608620215714e-09
|
||||
},
|
||||
"r2p1_ref_vs_2": {
|
||||
"shared": 5496,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 1.4772101910544689e-05,
|
||||
"max_logg_difference": 2.0455042104572385e-09
|
||||
},
|
||||
"r2p1_ref_vs_8": {
|
||||
"shared": 5496,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 1.4772018211627154e-05,
|
||||
"max_logg_difference": 2.059625359152051e-09
|
||||
},
|
||||
"r2p1_ref_vs_32": {
|
||||
"shared": 5496,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 1.4772020763985666e-05,
|
||||
"max_logg_difference": 2.068350379857975e-09
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,354 @@
|
||||
{
|
||||
"r100_hmax0.5": {
|
||||
"vertices": 3158,
|
||||
"triangles": 6188,
|
||||
"outcomes": {
|
||||
"0": 2906,
|
||||
"1": 252
|
||||
},
|
||||
"reasons": {
|
||||
"0": 2906,
|
||||
"1": 252
|
||||
},
|
||||
"accepted": 2269662,
|
||||
"rejected": 177,
|
||||
"rhs": 16813349,
|
||||
"accepted_percentiles": {
|
||||
"0": 312,
|
||||
"0.5": 736,
|
||||
"0.9": 786,
|
||||
"0.99": 848,
|
||||
"1": 899
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 0,
|
||||
"0.5": 0,
|
||||
"0.9": 0,
|
||||
"0.99": 1,
|
||||
"1": 1
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 2471,
|
||||
"0.5": 5446,
|
||||
"0.9": 5803,
|
||||
"0.99": 6223,
|
||||
"1": 6587
|
||||
},
|
||||
"sha256": "787386a026203d846debf25a6a4f431a131b06bd3ab464f75f3e17a1d379992a",
|
||||
"wall_seconds": 2.0714269301388413
|
||||
},
|
||||
"r100_hmax2": {
|
||||
"vertices": 3158,
|
||||
"triangles": 6188,
|
||||
"outcomes": {
|
||||
"0": 2906,
|
||||
"1": 252
|
||||
},
|
||||
"reasons": {
|
||||
"0": 2906,
|
||||
"1": 252
|
||||
},
|
||||
"accepted": 723677,
|
||||
"rejected": 5690,
|
||||
"rhs": 6030185,
|
||||
"accepted_percentiles": {
|
||||
"0": 165,
|
||||
"0.5": 220,
|
||||
"0.9": 290,
|
||||
"0.99": 348,
|
||||
"1": 397
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 0,
|
||||
"0.5": 2,
|
||||
"0.9": 4,
|
||||
"0.99": 5,
|
||||
"1": 5
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 1442,
|
||||
"0.5": 1855,
|
||||
"0.9": 2324,
|
||||
"0.99": 2737,
|
||||
"1": 3073
|
||||
},
|
||||
"sha256": "187c3cbba6a18d88608cd3859da94d88b58ce9d65e0d800d84b3254a6b139151",
|
||||
"wall_seconds": 0.9786226029973477
|
||||
},
|
||||
"r100_hmax8": {
|
||||
"vertices": 3158,
|
||||
"triangles": 6188,
|
||||
"outcomes": {
|
||||
"0": 2906,
|
||||
"1": 252
|
||||
},
|
||||
"reasons": {
|
||||
"0": 2906,
|
||||
"1": 252
|
||||
},
|
||||
"accepted": 463004,
|
||||
"rejected": 9336,
|
||||
"rhs": 4230835,
|
||||
"accepted_percentiles": {
|
||||
"0": 80,
|
||||
"0.5": 133,
|
||||
"0.9": 225,
|
||||
"0.99": 286,
|
||||
"1": 357
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 0,
|
||||
"0.5": 3,
|
||||
"0.9": 5,
|
||||
"0.99": 6,
|
||||
"1": 7
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 868,
|
||||
"0.5": 1253,
|
||||
"0.9": 1869,
|
||||
"0.99": 2289,
|
||||
"1": 2786
|
||||
},
|
||||
"sha256": "4c7e9d401f2af237129a6a677ca94ed1ee41472594db57852a08647b1dc34aad",
|
||||
"wall_seconds": 0.8228706018999219
|
||||
},
|
||||
"r100_hmax32": {
|
||||
"vertices": 3158,
|
||||
"triangles": 6188,
|
||||
"outcomes": {
|
||||
"0": 2906,
|
||||
"1": 252
|
||||
},
|
||||
"reasons": {
|
||||
"0": 2906,
|
||||
"1": 252
|
||||
},
|
||||
"accepted": 441750,
|
||||
"rejected": 9336,
|
||||
"rhs": 4081609,
|
||||
"accepted_percentiles": {
|
||||
"0": 72,
|
||||
"0.5": 126,
|
||||
"0.9": 222,
|
||||
"0.99": 285,
|
||||
"1": 357
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 0,
|
||||
"0.5": 3,
|
||||
"0.9": 5,
|
||||
"0.99": 6,
|
||||
"1": 7
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 812,
|
||||
"0.5": 1204,
|
||||
"0.9": 1848,
|
||||
"0.99": 2282,
|
||||
"1": 2786
|
||||
},
|
||||
"sha256": "3742efd56893bec9e62a01668915ef7dda613d6504b2057043eb97c9b38334f3",
|
||||
"wall_seconds": 0.8300854018889368
|
||||
},
|
||||
"r100_2_vs_0.5": {
|
||||
"shared": 3158,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 3.077090601306577e-08,
|
||||
"max_logg_difference": 5.28674309191457e-11
|
||||
},
|
||||
"r100_2_vs_8": {
|
||||
"shared": 3158,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 7.063214322895989e-09,
|
||||
"max_logg_difference": 3.2702011237839557e-11
|
||||
},
|
||||
"r100_2_vs_32": {
|
||||
"shared": 3158,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 7.063404202987903e-09,
|
||||
"max_logg_difference": 2.477072019724247e-11
|
||||
},
|
||||
"r2p1_hmax0.5": {
|
||||
"vertices": 5496,
|
||||
"triangles": 10816,
|
||||
"outcomes": {
|
||||
"1": 1336,
|
||||
"0": 4160
|
||||
},
|
||||
"reasons": {
|
||||
"1": 1336,
|
||||
"0": 4160
|
||||
},
|
||||
"accepted": 2646842,
|
||||
"rejected": 830,
|
||||
"rhs": 20136508,
|
||||
"accepted_percentiles": {
|
||||
"0": 116,
|
||||
"0.5": 552,
|
||||
"0.9": 618,
|
||||
"0.99": 672,
|
||||
"1": 823
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 0,
|
||||
"0.5": 0,
|
||||
"0.9": 1,
|
||||
"0.99": 1,
|
||||
"1": 2
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 1099,
|
||||
"0.5": 4158,
|
||||
"0.9": 4620,
|
||||
"0.99": 4991,
|
||||
"1": 6055
|
||||
},
|
||||
"sha256": "3a77a1e7dee3cd18d3ab8a408826aba932f912dc88749989e0c307013d6e7e81",
|
||||
"wall_seconds": 1.973590083885938
|
||||
},
|
||||
"r2p1_hmax2": {
|
||||
"vertices": 5496,
|
||||
"triangles": 10816,
|
||||
"outcomes": {
|
||||
"1": 1336,
|
||||
"0": 4160
|
||||
},
|
||||
"reasons": {
|
||||
"1": 1336,
|
||||
"0": 4160
|
||||
},
|
||||
"accepted": 1131104,
|
||||
"rejected": 4004,
|
||||
"rhs": 9548434,
|
||||
"accepted_percentiles": {
|
||||
"0": 109,
|
||||
"0.5": 202,
|
||||
"0.9": 258,
|
||||
"0.99": 311,
|
||||
"1": 460
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 0,
|
||||
"0.5": 1,
|
||||
"0.9": 1,
|
||||
"0.99": 2,
|
||||
"1": 2
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 1050,
|
||||
"0.5": 1708,
|
||||
"0.9": 2100,
|
||||
"0.99": 2478,
|
||||
"1": 3521
|
||||
},
|
||||
"sha256": "899331ea41d1612cf66bc7664b50e866f4f3bc7309e9c206440f801238ca455c",
|
||||
"wall_seconds": 1.177934248931706
|
||||
},
|
||||
"r2p1_hmax8": {
|
||||
"vertices": 5496,
|
||||
"triangles": 10816,
|
||||
"outcomes": {
|
||||
"1": 1336,
|
||||
"0": 4160
|
||||
},
|
||||
"reasons": {
|
||||
"1": 1336,
|
||||
"0": 4160
|
||||
},
|
||||
"accepted": 822680,
|
||||
"rejected": 4004,
|
||||
"rhs": 7389760,
|
||||
"accepted_percentiles": {
|
||||
"0": 87,
|
||||
"0.5": 137,
|
||||
"0.9": 212,
|
||||
"0.99": 265,
|
||||
"1": 386
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 0,
|
||||
"0.5": 1,
|
||||
"0.9": 1,
|
||||
"0.99": 2,
|
||||
"1": 2
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 910,
|
||||
"0.5": 1260,
|
||||
"0.9": 1778,
|
||||
"0.99": 2142,
|
||||
"1": 3003
|
||||
},
|
||||
"sha256": "49edfbe9dfb2948d3472e6ef6287bed103332758953756a7e4089316caa0b1b6",
|
||||
"wall_seconds": 0.9704615350347012
|
||||
},
|
||||
"r2p1_hmax32": {
|
||||
"vertices": 5496,
|
||||
"triangles": 10816,
|
||||
"outcomes": {
|
||||
"1": 1336,
|
||||
"0": 4160
|
||||
},
|
||||
"reasons": {
|
||||
"1": 1336,
|
||||
"0": 4160
|
||||
},
|
||||
"accepted": 795354,
|
||||
"rejected": 4004,
|
||||
"rhs": 7197806,
|
||||
"accepted_percentiles": {
|
||||
"0": 81,
|
||||
"0.5": 132,
|
||||
"0.9": 210,
|
||||
"0.99": 261,
|
||||
"1": 379
|
||||
},
|
||||
"rejected_percentiles": {
|
||||
"0": 0,
|
||||
"0.5": 1,
|
||||
"0.9": 1,
|
||||
"0.99": 2,
|
||||
"1": 2
|
||||
},
|
||||
"rhs_percentiles": {
|
||||
"0": 861,
|
||||
"0.5": 1218,
|
||||
"0.9": 1757,
|
||||
"0.99": 2128,
|
||||
"1": 2954
|
||||
},
|
||||
"sha256": "74bbb1e969644d49b7fdf5a6a7a5930ca8b962ec91628cd91feeb9df039100e7",
|
||||
"wall_seconds": 0.9720155198592693
|
||||
},
|
||||
"r2p1_2_vs_0.5": {
|
||||
"shared": 5496,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 1.046601929593161e-10,
|
||||
"max_logg_difference": 6.900746640781108e-11
|
||||
},
|
||||
"r2p1_2_vs_8": {
|
||||
"shared": 5496,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 8.369894549651799e-11,
|
||||
"max_logg_difference": 1.9082291302652266e-11
|
||||
},
|
||||
"r2p1_2_vs_32": {
|
||||
"shared": 5496,
|
||||
"only_a": 0,
|
||||
"only_b": 0,
|
||||
"terminal_mismatches": 0,
|
||||
"max_sky_angle": 8.114658658759588e-11,
|
||||
"max_logg_difference": 2.823297151621773e-11
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
# Experiment A/B environment and source identity
|
||||
date_utc: 2026-10-05T22:15:50Z
|
||||
host: Linux ATRI-gentoo 6.18.48-gentoo #1 SMP PREEMPT_DYNAMIC Mon Aug 31 13:33:24 EDT 2026 x86_64 12th Gen Intel(R) Core(TM) i7-12700K GenuineIntel GNU/Linux
|
||||
nproc: 16
|
||||
cc:
|
||||
cc (Gentoo 16.2.1_p20260926 p1) 16.2.1 20260926
|
||||
Copyright (C) 2026 Free Software Foundation, Inc.
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
git_head: c894fdb11a0845558fdb67b71a9bd019a2d94ed4
|
||||
git_status_short:
|
||||
M Makefile
|
||||
M mk/reference_images.mk
|
||||
M nr_spacetime_movie_renderer_design.md
|
||||
M src/asymptotic.c
|
||||
M src/frame.c
|
||||
M src/frame.h
|
||||
M src/geodesic.c
|
||||
M src/geodesic.h
|
||||
M src/lens_map.c
|
||||
M src/lens_map.h
|
||||
M src/main.c
|
||||
M src/ray.c
|
||||
M src/ray.h
|
||||
M tests/test_asymptotic.c
|
||||
M tests/test_camera_cli.py
|
||||
M tests/test_frame.c
|
||||
M usage.md
|
||||
?? nmesh_spacetime_output_format.md
|
||||
?? tests/test_adaptive_cli.py
|
||||
?? tests/test_geodesic_adaptive.c
|
||||
|
||||
# sha256 of the sources consumed by the harnesses
|
||||
25f24a2e1c9ce49508fed230dfb3f6d9986e92bb4a5e6347bb2356ac0ee5fffa src/geodesic.c
|
||||
1e43b95346f484050354631e8682f9793e618cbbd1de6338bd15e092216ae6fb src/geodesic.h
|
||||
e6c0616461507adb1141ca3caa7e76f30e2497c4d53acfef092597fb60431a4a src/asymptotic.c
|
||||
db029ef837f12800bbf81fc74e7bab6eb9f18e42a53ceb5f205867d8a329321d src/asymptotic.h
|
||||
1792a17f432ceee32ee9c802486ecf9d64d96307c249e0d5cfa563ef4a0fefd5 src/asymptotic_schwarzschild.c
|
||||
cc9ad0b04e11bd08bcf238901125e76a26ec332cd7fe72871e7c46fb7a322aec src/asymptotic_schwarzschild.h
|
||||
ea0b5838bc56fbfeedec9110cd20653b892127bfc863db91a3a8cabaad4c520b src/asymptotic_gl48.h
|
||||
359066d78a10f9589a220124147cdbefaff8f97028a9fdd2923b474349599752 src/spacetime.h
|
||||
4c7ae6e96fe57e2a2ae2491db924bad56af59abfcc305bbb6ab2609f3b405e0d src/spacetime_common.c
|
||||
690045ed715a951335dc7d654258e0f3b802e0bf6e2815ceb4858fa99cd372d7 src/spacetime_minkowski.c
|
||||
e5b5935d16e24b07cedb25d184e8f7029075aec9496f54c23cb1061971914a72 src/spacetime_schwarzschild.c
|
||||
75956034303fe3bab9324ecb87533e054458e35a26132a3e885233acad785767 src/spacetime_alcubierre.c
|
||||
559f626983c68e06d3223d8381085a0b5ac422529a1ea656f4e24b1b3a50f51a src/observer.c
|
||||
d761aabfbc277b0989bd20302578302d91f8253a9d900943de62ab3edd3f145b src/observer.h
|
||||
|
||||
# sha256 of the harnesses and this script
|
||||
853018775c335180199aa3a0046445a5f795f83d18de0ff6a664a6368d835dbd a_public_endpoints.c
|
||||
10a6558815e3ff5fa114aa8ca6dfe3c7db6e860ecb9f7cab20c59145a662d3d2 b_actual_h.c
|
||||
1cfd93b0c9f187b4c45d169fbeb8c6fea7f02c3317ac24a32691723b0086548c run_experiment.sh
|
||||
@@ -0,0 +1,318 @@
|
||||
# Experiment A/B summary tables
|
||||
|
||||
## A Schwarzschild references (DP tol=1e-12, max_step=0.25)
|
||||
|
||||
| case | dir | theta | outcome | reason | stop_t | steps | rej | rhs | g | thr |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| r30_inward | 0 | 0 | DARK | REDSHIFT | -69.57 | 531 | 0 | 4004 | 0 | 8 |
|
||||
| r30_inward | 1 | 3.142 | ESC | NONE | -226 | 905 | 0 | 6629 | 1.035 | nan |
|
||||
| r30_inward | 2 | 1.571 | ESC | NONE | -256.7 | 1028 | 0 | 7490 | 1.035 | nan |
|
||||
| r30_inward | 3 | 0.1681 | DARK | REDSHIFT | -225.9 | 3746 | 0 | 26509 | 0 | 8 |
|
||||
| r30_inward | 4 | 0.1671 | DARK | REDSHIFT | -94.28 | 1127 | 0 | 8176 | 0 | 8 |
|
||||
| r30_inward | 5 | 0.1691 | ESC | NONE | -322.4 | 1834 | 0 | 13132 | 1.035 | nan |
|
||||
| r30_inward | 6 | 0.1681 | DARK | REDSHIFT | -118.2 | 1606 | 0 | 11529 | 0 | 8 |
|
||||
| r30_inward | 7 | 0.1681 | ESC | NONE | -346.3 | 2312 | 1 | 16485 | 1.035 | nan |
|
||||
| r30_inward | 8 | 0.1681 | DARK | REDSHIFT | -142.2 | 2081 | 0 | 14854 | 0 | 8 |
|
||||
| r30_inward | 9 | 0.1681 | ESC | NONE | -370.2 | 2790 | 1 | 19831 | 1.035 | nan |
|
||||
| r30_inward | 10 | 0.2181 | ESC | NONE | -302.6 | 1409 | 1 | 10164 | 1.035 | nan |
|
||||
| r30_inward | 11 | 0.1181 | DARK | REDSHIFT | -73.76 | 665 | 0 | 4942 | 0 | 8 |
|
||||
| r100_inward | 0 | 0 | DARK | REDSHIFT | -144.3 | 830 | 0 | 6097 | 0 | 8 |
|
||||
| r100_inward | 1 | 3.142 | ESC | NONE | -156 | 625 | 0 | 4669 | 1.01 | nan |
|
||||
| r100_inward | 2 | 1.571 | ESC | NONE | -237.7 | 952 | 0 | 6958 | 1.01 | nan |
|
||||
| r100_inward | 3 | 0.05146 | DARK | REDSHIFT | -301.1 | 4045 | 0 | 28602 | 0 | 8 |
|
||||
| r100_inward | 4 | 0.05046 | DARK | REDSHIFT | -163.1 | 1292 | 0 | 9331 | 0 | 8 |
|
||||
| r100_inward | 5 | 0.05246 | ESC | NONE | -391.6 | 2014 | 1 | 14399 | 1.01 | nan |
|
||||
| r100_inward | 6 | 0.05145 | DARK | REDSHIFT | -187.1 | 1773 | 0 | 12698 | 0 | 8 |
|
||||
| r100_inward | 7 | 0.05147 | ESC | NONE | -415.4 | 2493 | 0 | 17745 | 1.01 | nan |
|
||||
| r100_inward | 8 | 0.05146 | DARK | REDSHIFT | -211 | 2252 | 0 | 16051 | 0 | 8 |
|
||||
| r100_inward | 9 | 0.05146 | ESC | NONE | -439.3 | 2969 | 0 | 21077 | 1.01 | nan |
|
||||
| r100_inward | 10 | 0.1015 | ESC | NONE | -372.3 | 1571 | 0 | 11291 | 1.01 | nan |
|
||||
| r100_inward | 11 | 0.001462 | DARK | REDSHIFT | -144.3 | 830 | 0 | 6097 | 0 | 8 |
|
||||
| r2p1_outward | 0 | 0 | ESC | NONE | -253.9 | 1120 | 1 | 8141 | 4.583 | nan |
|
||||
| r2p1_outward | 1 | 3.142 | DARK | REDSHIFT | -32.25 | 186 | 0 | 1589 | 0 | 8 |
|
||||
| r2p1_outward | 2 | 1.571 | DARK | REDSHIFT | -32.77 | 316 | 1 | 2506 | 0 | 8 |
|
||||
| r2p1_outward | 3 | 0.5704 | ESC | NONE | -414.9 | 4263 | 2 | 30149 | 4.583 | nan |
|
||||
| r2p1_outward | 4 | 0.5694 | ESC | NONE | -285.6 | 1686 | 1 | 12103 | 4.583 | nan |
|
||||
| r2p1_outward | 5 | 0.5714 | DARK | REDSHIFT | -61.58 | 995 | 1 | 7259 | 0 | 8 |
|
||||
| r2p1_outward | 6 | 0.5704 | ESC | NONE | -309.5 | 2162 | 2 | 15442 | 4.583 | nan |
|
||||
| r2p1_outward | 7 | 0.5704 | DARK | REDSHIFT | -85.49 | 1474 | 1 | 10612 | 0 | 8 |
|
||||
| r2p1_outward | 8 | 0.5704 | ESC | NONE | -333.5 | 2639 | 1 | 18774 | 4.583 | nan |
|
||||
| r2p1_outward | 9 | 0.5704 | DARK | REDSHIFT | -109.4 | 1950 | 1 | 13944 | 0 | 8 |
|
||||
| r2p1_outward | 10 | 0.6204 | DARK | REDSHIFT | -41.99 | 585 | 1 | 4389 | 0 | 8 |
|
||||
| r2p1_outward | 11 | 0.5204 | ESC | NONE | -265 | 1303 | 2 | 9429 | 4.583 | nan |
|
||||
| r1p5_freefall | 0 | 0 | DARK | REDSHIFT | -30.66 | 231 | 1 | 1911 | 0 | 8 |
|
||||
| r1p5_freefall | 1 | 1.571 | ESC | NONE | -255.2 | 1130 | 1 | 8211 | 1 | nan |
|
||||
| r1p5_freefall | 2 | 3.142 | ESC | NONE | -254.5 | 1143 | 1 | 8302 | 0.4641 | nan |
|
||||
| r1p5_freefall | 3 | 2.356 | ESC | NONE | -254.6 | 1127 | 1 | 8190 | 0.5505 | nan |
|
||||
|
||||
## A Schwarzschild upper scan (min_step=1e-12, tol=1e-9)
|
||||
|
||||
| case | upper | mismatch | max_dn_ang | max_dgrel | max_dstopT | sum_rhs | max_rej | ESC | DARK | UNRES | INC |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| r100_inward | 0.25 | 0 | 2.604e-05 | 2.048e-09 | 35.2 | 93464 | 0 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 0.5 | 0 | 5.696e-05 | 2.056e-09 | 39.27 | 56595 | 0 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 1 | 0 | 8.348e-05 | 2.051e-09 | 41.25 | 39788 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 2 | 0 | 8.286e-05 | 2.026e-09 | 41.22 | 32389 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 4 | 0 | 8.089e-05 | 2.028e-09 | 41.09 | 29393 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 8 | 0 | 8.034e-05 | 2.034e-09 | 41.06 | 28427 | 3 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 16 | 0 | 8.034e-05 | 2.042e-09 | 41.06 | 28189 | 3 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 32 | 0 | 8.034e-05 | 2.043e-09 | 41.06 | 28182 | 3 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 64 | 0 | 8.034e-05 | 2.043e-09 | 41.06 | 28182 | 3 | 6 | 6 | 0 | 0 |
|
||||
| r1p5_freefall | 0.25 | 0 | 1.002e-10 | 3.165e-10 | 2.608e-08 | 23597 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 0.5 | 0 | 8.875e-11 | 3.658e-10 | 3.089e-08 | 12747 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 1 | 0 | 8.187e-11 | 3.811e-10 | 2.817e-08 | 7553 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 2 | 0 | 8.165e-11 | 3.719e-10 | 2.571e-08 | 5131 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 4 | 0 | 8.157e-11 | 3.632e-10 | 2.346e-08 | 4039 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 8 | 0 | 8.151e-11 | 3.547e-10 | 2.125e-08 | 3591 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 16 | 0 | 8.146e-11 | 3.469e-10 | 1.925e-08 | 3465 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 32 | 0 | 8.146e-11 | 3.46e-10 | 1.948e-08 | 3458 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 64 | 0 | 8.146e-11 | 3.46e-10 | 1.948e-08 | 3458 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r2p1_outward | 0.25 | 1 | 0.0002872 | 2.661e-09 | 263.1 | 62258 | 0 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 0.5 | 1 | 0.0002872 | 2.644e-09 | 263.1 | 42490 | 0 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 1 | 1 | 0.0002872 | 2.615e-09 | 263.1 | 33544 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 2 | 1 | 0.0002872 | 2.592e-09 | 263.1 | 29421 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 4 | 1 | 0.0002872 | 2.598e-09 | 263.1 | 27580 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 8 | 1 | 0.0002872 | 2.606e-09 | 263.1 | 26831 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 16 | 1 | 0.0002872 | 2.614e-09 | 263.1 | 26614 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 32 | 1 | 0.0002872 | 2.615e-09 | 263.1 | 26607 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 64 | 1 | 0.0002872 | 2.615e-09 | 263.1 | 26607 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r30_inward | 0.25 | 0 | 8.667e-05 | 2.262e-09 | 35.08 | 76510 | 0 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 0.5 | 0 | 0.0001866 | 2.268e-09 | 39.06 | 49063 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 1 | 0 | 0.0002801 | 2.266e-09 | 41.17 | 36974 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 2 | 0 | 0.0002819 | 2.244e-09 | 41.2 | 31843 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 4 | 0 | 0.0002819 | 2.25e-09 | 41.2 | 29617 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 8 | 0 | 0.0002819 | 2.258e-09 | 41.2 | 28714 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 16 | 0 | 0.0002819 | 2.266e-09 | 41.2 | 28455 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 32 | 0 | 0.0002819 | 2.266e-09 | 41.2 | 28434 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 64 | 0 | 0.0002819 | 2.266e-09 | 41.2 | 28434 | 2 | 6 | 6 | 0 | 0 |
|
||||
|
||||
## A Schwarzschild min scan (max_step=2, tol=1e-9)
|
||||
|
||||
| case | min_step | mismatch | max_dn_ang | max_dgrel | max_dstopT | sum_rhs | max_rej | ESC | DARK | UNRES | INC |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| r100_inward | 1e-14 | 0 | 8.286e-05 | 2.026e-09 | 41.22 | 32389 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 1e-12 | 0 | 8.286e-05 | 2.026e-09 | 41.22 | 32389 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 1e-10 | 0 | 8.286e-05 | 2.026e-09 | 41.22 | 32389 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 1e-08 | 0 | 8.286e-05 | 2.026e-09 | 41.22 | 32389 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 1e-06 | 0 | 8.286e-05 | 2.026e-09 | 41.22 | 32389 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 1e-05 | 0 | 8.286e-05 | 2.026e-09 | 41.22 | 32389 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 0.0001 | 0 | 8.286e-05 | 2.026e-09 | 41.22 | 32389 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 0.001 | 0 | 8.286e-05 | 2.026e-09 | 41.22 | 32389 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 0.01 | 0 | 8.286e-05 | 2.026e-09 | 41.22 | 32389 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r100_inward | 0.1 | 0 | 8.286e-05 | 2.026e-09 | 41.22 | 32389 | 1 | 6 | 6 | 0 | 0 |
|
||||
| r1p5_freefall | 1e-14 | 0 | 8.165e-11 | 3.719e-10 | 2.571e-08 | 5131 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 1e-12 | 0 | 8.165e-11 | 3.719e-10 | 2.571e-08 | 5131 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 1e-10 | 0 | 8.165e-11 | 3.719e-10 | 2.571e-08 | 5131 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 1e-08 | 0 | 8.165e-11 | 3.719e-10 | 2.571e-08 | 5131 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 1e-06 | 0 | 8.165e-11 | 3.719e-10 | 2.571e-08 | 5131 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 1e-05 | 0 | 8.165e-11 | 3.719e-10 | 2.571e-08 | 5131 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 0.0001 | 0 | 8.165e-11 | 3.719e-10 | 2.571e-08 | 5131 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 0.001 | 0 | 8.165e-11 | 3.719e-10 | 2.571e-08 | 5131 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 0.01 | 0 | 8.165e-11 | 3.719e-10 | 2.571e-08 | 5131 | 0 | 3 | 1 | 0 | 0 |
|
||||
| r1p5_freefall | 0.1 | 1 | 8.165e-11 | 3.719e-10 | 254.3 | 3654 | 0 | 2 | 1 | 0 | 1 |
|
||||
| r2p1_outward | 1e-14 | 1 | 0.0002872 | 2.592e-09 | 263.1 | 29421 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 1e-12 | 1 | 0.0002872 | 2.592e-09 | 263.1 | 29421 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 1e-10 | 1 | 0.0002872 | 2.592e-09 | 263.1 | 29421 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 1e-08 | 1 | 0.0002872 | 2.592e-09 | 263.1 | 29421 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 1e-06 | 1 | 0.0002872 | 2.592e-09 | 263.1 | 29421 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 1e-05 | 1 | 0.0002872 | 2.592e-09 | 263.1 | 29421 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 0.0001 | 1 | 0.0002872 | 2.592e-09 | 263.1 | 29421 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 0.001 | 1 | 0.0002872 | 2.592e-09 | 263.1 | 29421 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 0.01 | 1 | 0.0002872 | 2.592e-09 | 263.1 | 29421 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r2p1_outward | 0.1 | 1 | 0.0002872 | 2.592e-09 | 263.1 | 29421 | 1 | 5 | 7 | 0 | 0 |
|
||||
| r30_inward | 1e-14 | 0 | 0.0002819 | 2.244e-09 | 41.2 | 31843 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 1e-12 | 0 | 0.0002819 | 2.244e-09 | 41.2 | 31843 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 1e-10 | 0 | 0.0002819 | 2.244e-09 | 41.2 | 31843 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 1e-08 | 0 | 0.0002819 | 2.244e-09 | 41.2 | 31843 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 1e-06 | 0 | 0.0002819 | 2.244e-09 | 41.2 | 31843 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 1e-05 | 0 | 0.0002819 | 2.244e-09 | 41.2 | 31843 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 0.0001 | 0 | 0.0002819 | 2.244e-09 | 41.2 | 31843 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 0.001 | 0 | 0.0002819 | 2.244e-09 | 41.2 | 31843 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 0.01 | 0 | 0.0002819 | 2.244e-09 | 41.2 | 31843 | 2 | 6 | 6 | 0 | 0 |
|
||||
| r30_inward | 0.1 | 0 | 0.0002819 | 2.244e-09 | 41.2 | 31843 | 2 | 6 | 6 | 0 | 0 |
|
||||
|
||||
## A Schwarzschild sensitive RK4 .01 vs .005
|
||||
|
||||
| case | dir | theta | out.01 | out.005 | hhalve_dn_ang | |dg| | rhs.01 | rhs.005 |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| r2p1_outward | 6 | 0.5704 | ESC | ESC | 1.032e-07 | 7.386e-12 | 124072 | 247880 |
|
||||
| r2p1_outward | 7 | 0.5704 | DARK | DARK | nan | 0 | 34196 | 68392 |
|
||||
| r2p1_outward | 8 | 0.5704 | ESC | ESC | 1.04e-05 | 7.618e-12 | 133644 | 267024 |
|
||||
| r2p1_outward | 9 | 0.5704 | DARK | DARK | nan | 0 | 43768 | 87536 |
|
||||
| r30_inward | 6 | 0.1681 | DARK | DARK | nan | 0 | 47300 | 94600 |
|
||||
| r30_inward | 7 | 0.1681 | ESC | ESC | 0 | 8.238e-14 | 138764 | 277264 |
|
||||
| r30_inward | 8 | 0.1681 | DARK | DARK | nan | 0 | 56872 | 113744 |
|
||||
| r30_inward | 9 | 0.1681 | ESC | ESC | 1.891e-07 | 7.55e-15 | 148336 | 296408 |
|
||||
|
||||
## A Minkowski flat analytic check (n_inf and t)
|
||||
|
||||
| upper | min_step | n | max_dn_ang | max_dgrel | max_t_err |
|
||||
|---|---|---|---|---|---|
|
||||
| 1 | 1e-12 | 6 | 0 | 0 | 5.258e-13 |
|
||||
| 1 | 1e-06 | 6 | 0 | 0 | 5.258e-13 |
|
||||
| 1 | 0.1 | 6 | 0 | 0 | 5.258e-13 |
|
||||
| 4 | 1e-12 | 6 | 0 | 0 | 1.776e-12 |
|
||||
| 4 | 1e-06 | 6 | 0 | 0 | 1.776e-12 |
|
||||
| 4 | 0.1 | 6 | 0 | 0 | 1.776e-12 |
|
||||
| 16 | 1e-12 | 6 | 0 | 0 | 1.3e-11 |
|
||||
| 16 | 1e-06 | 6 | 0 | 0 | 1.3e-11 |
|
||||
| 16 | 0.1 | 6 | 0 | 0 | 1.3e-11 |
|
||||
| 64 | 1e-12 | 6 | 0 | 0 | 3.894e-11 |
|
||||
| 64 | 1e-06 | 6 | 0 | 0 | 3.894e-11 |
|
||||
| 64 | 0.1 | 6 | 0 | 0 | 3.894e-11 |
|
||||
| 256 | 1e-12 | 6 | 0 | 0 | 7.661e-11 |
|
||||
| 256 | 1e-06 | 6 | 0 | 0 | 7.661e-11 |
|
||||
| 256 | 0.1 | 6 | 0 | 0 | 7.661e-11 |
|
||||
|
||||
## A Minkowski flat analytic check (crossing x and t)
|
||||
|
||||
| upper | min_step | n | max_x_err | max_t_err |
|
||||
|---|---|---|---|---|
|
||||
| 1 | 1e-12 | 6 | 4.832e-13 | 5.258e-13 |
|
||||
| 1 | 1e-06 | 6 | 4.832e-13 | 5.258e-13 |
|
||||
| 1 | 0.1 | 6 | 4.832e-13 | 5.258e-13 |
|
||||
| 4 | 1e-12 | 6 | 1.72e-12 | 1.776e-12 |
|
||||
| 4 | 1e-06 | 6 | 1.72e-12 | 1.776e-12 |
|
||||
| 4 | 0.1 | 6 | 1.72e-12 | 1.776e-12 |
|
||||
| 16 | 1e-12 | 6 | 1.268e-11 | 1.3e-11 |
|
||||
| 16 | 1e-06 | 6 | 1.268e-11 | 1.3e-11 |
|
||||
| 16 | 0.1 | 6 | 1.268e-11 | 1.3e-11 |
|
||||
| 64 | 1e-12 | 6 | 3.506e-11 | 3.894e-11 |
|
||||
| 64 | 1e-06 | 6 | 3.506e-11 | 3.894e-11 |
|
||||
| 64 | 0.1 | 6 | 3.506e-11 | 3.894e-11 |
|
||||
| 256 | 1e-12 | 6 | 7.061e-11 | 7.661e-11 |
|
||||
| 256 | 1e-06 | 6 | 7.061e-11 | 7.661e-11 |
|
||||
| 256 | 0.1 | 6 | 7.061e-11 | 7.661e-11 |
|
||||
|
||||
## A Alcubierre alc_v3_s1 upper scan
|
||||
|
||||
| case | upper | mismatch | max_dn_ang | max_dgrel | max_dstopT | sum_rhs | max_rej | ESC | DARK | UNRES | INC |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| alc_v3_s1 | 0.05 | 0 | 7.544e-14 | 7.627e-13 | 1.99e-13 | 19740 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 0.05 | 0 | 7.544e-14 | 7.627e-13 | 1.99e-13 | 19740 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 0.05 | 0 | 7.544e-14 | 7.627e-13 | 1.99e-13 | 19740 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 0.2 | 0 | 1.208e-10 | 3.452e-10 | 4.091e-10 | 6475 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 0.2 | 0 | 1.208e-10 | 3.452e-10 | 4.091e-10 | 6475 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 0.2 | 0 | 1.208e-10 | 3.452e-10 | 4.091e-10 | 6475 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 0.4 | 0 | 1.03e-10 | 3.464e-10 | 3.143e-10 | 4613 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 0.4 | 0 | 1.03e-10 | 3.464e-10 | 3.143e-10 | 4613 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 0.4 | 0 | 1.03e-10 | 3.464e-10 | 3.143e-10 | 4613 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 0.8 | 0 | 7.888e-11 | 7.954e-10 | 7.369e-10 | 3794 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 0.8 | 0 | 7.888e-11 | 7.954e-10 | 7.369e-10 | 3794 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 0.8 | 0 | 7.888e-11 | 7.954e-10 | 7.369e-10 | 3794 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 1.6 | 0 | 1.239e-10 | 1.118e-09 | 1.148e-09 | 3430 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 1.6 | 0 | 1.239e-10 | 1.118e-09 | 1.148e-09 | 3430 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 1.6 | 0 | 1.239e-10 | 1.118e-09 | 1.148e-09 | 3430 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 3.2 | 0 | 1.545e-10 | 1.26e-09 | 1.346e-09 | 3290 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 3.2 | 0 | 1.545e-10 | 1.26e-09 | 1.346e-09 | 3290 | 2 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s1 | 3.2 | 0 | 1.545e-10 | 1.26e-09 | 1.346e-09 | 3290 | 2 | 6 | 0 | 0 | 0 |
|
||||
|
||||
## A Alcubierre alc_v3_s10 upper scan
|
||||
|
||||
| case | upper | mismatch | max_dn_ang | max_dgrel | max_dstopT | sum_rhs | max_rej | ESC | DARK | UNRES | INC |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| alc_v3_s10 | 0.005 | 0 | 5.829e-15 | 3.109e-14 | 4.663e-14 | 27412 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.005 | 0 | 5.829e-15 | 3.109e-14 | 4.663e-14 | 27412 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.005 | 0 | 5.829e-15 | 3.109e-14 | 4.663e-14 | 27412 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.02 | 0 | 6.299e-12 | 2.402e-10 | 1.399e-11 | 8337 | 4 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.02 | 0 | 6.299e-12 | 2.402e-10 | 1.399e-11 | 8337 | 4 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.02 | 0 | 6.299e-12 | 2.402e-10 | 1.399e-11 | 8337 | 4 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.04 | 0 | 3.288e-11 | 3.854e-10 | 6.294e-11 | 5621 | 6 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.04 | 0 | 3.288e-11 | 3.854e-10 | 6.294e-11 | 5621 | 6 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.04 | 0 | 3.288e-11 | 3.854e-10 | 6.294e-11 | 5621 | 6 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.08 | 0 | 1.042e-11 | 2.781e-10 | 8.024e-11 | 4648 | 12 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.08 | 0 | 1.042e-11 | 2.781e-10 | 8.024e-11 | 4648 | 12 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.08 | 0 | 1.042e-11 | 2.781e-10 | 8.024e-11 | 4648 | 12 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.16 | 0 | 1.131e-11 | 7.6e-10 | 9.538e-11 | 4270 | 13 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.16 | 0 | 1.131e-11 | 7.6e-10 | 9.538e-11 | 4270 | 13 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.16 | 0 | 1.131e-11 | 7.6e-10 | 9.538e-11 | 4270 | 13 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.32 | 0 | 3.131e-11 | 9.778e-10 | 1.041e-10 | 4116 | 13 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.32 | 0 | 3.131e-11 | 9.778e-10 | 1.041e-10 | 4116 | 13 | 6 | 0 | 0 | 0 |
|
||||
| alc_v3_s10 | 0.32 | 0 | 3.131e-11 | 9.778e-10 | 1.041e-10 | 4116 | 13 | 6 | 0 | 0 | 0 |
|
||||
|
||||
## A Alcubierre alc_v9_s1 upper scan
|
||||
|
||||
| case | upper | mismatch | max_dn_ang | max_dgrel | max_dstopT | sum_rhs | max_rej | ESC | DARK | UNRES | INC |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| alc_v9_s1 | 0.05 | 0 | 6.632e-13 | 2.591e-11 | 1.387e-11 | 39452 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 0.05 | 0 | 6.632e-13 | 2.591e-11 | 1.387e-11 | 39452 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 0.05 | 0 | 6.632e-13 | 2.591e-11 | 1.387e-11 | 39452 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 0.2 | 0 | 1.078e-10 | 2.073e-09 | 6.805e-10 | 11690 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 0.2 | 0 | 1.078e-10 | 2.073e-09 | 6.805e-10 | 11690 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 0.2 | 0 | 1.078e-10 | 2.073e-09 | 6.805e-10 | 11690 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 0.4 | 0 | 6.25e-11 | 2.466e-09 | 1.083e-09 | 7413 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 0.4 | 0 | 6.25e-11 | 2.466e-09 | 1.083e-09 | 7413 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 0.4 | 0 | 6.25e-11 | 2.466e-09 | 1.083e-09 | 7413 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 0.8 | 0 | 5.349e-11 | 2.718e-09 | 1.186e-09 | 5369 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 0.8 | 0 | 5.349e-11 | 2.718e-09 | 1.186e-09 | 5369 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 0.8 | 0 | 5.349e-11 | 2.718e-09 | 1.186e-09 | 5369 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 1.6 | 0 | 1.035e-10 | 2.819e-09 | 9.549e-10 | 4431 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 1.6 | 0 | 1.035e-10 | 2.819e-09 | 9.549e-10 | 4431 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 1.6 | 0 | 1.035e-10 | 2.819e-09 | 9.549e-10 | 4431 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 3.2 | 0 | 1.239e-10 | 2.823e-09 | 3.249e-09 | 3983 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 3.2 | 0 | 1.239e-10 | 2.823e-09 | 3.249e-09 | 3983 | 3 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s1 | 3.2 | 0 | 1.239e-10 | 2.823e-09 | 3.249e-09 | 3983 | 3 | 6 | 0 | 0 | 0 |
|
||||
|
||||
## A Alcubierre alc_v9_s10 upper scan
|
||||
|
||||
| case | upper | mismatch | max_dn_ang | max_dgrel | max_dstopT | sum_rhs | max_rej | ESC | DARK | UNRES | INC |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| alc_v9_s10 | 0.005 | 0 | 8.937e-14 | 1.103e-11 | 3.553e-13 | 48167 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.005 | 0 | 8.937e-14 | 1.103e-11 | 3.553e-13 | 48167 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.005 | 0 | 8.937e-14 | 1.103e-11 | 3.553e-13 | 48167 | 0 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.02 | 0 | 5.331e-11 | 6.906e-10 | 1.092e-10 | 13692 | 6 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.02 | 0 | 5.331e-11 | 6.906e-10 | 1.092e-10 | 13692 | 6 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.02 | 0 | 5.331e-11 | 6.906e-10 | 1.092e-10 | 13692 | 6 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.04 | 0 | 1.752e-10 | 9.749e-10 | 3.646e-10 | 8484 | 7 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.04 | 0 | 1.752e-10 | 9.749e-10 | 3.646e-10 | 8484 | 7 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.04 | 0 | 1.752e-10 | 9.749e-10 | 3.646e-10 | 8484 | 7 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.08 | 0 | 1.196e-10 | 1.457e-09 | 2.695e-10 | 6251 | 12 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.08 | 0 | 1.196e-10 | 1.457e-09 | 2.695e-10 | 6251 | 12 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.08 | 0 | 1.196e-10 | 1.457e-09 | 2.695e-10 | 6251 | 12 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.16 | 0 | 1.727e-11 | 1.077e-09 | 1.26e-10 | 5278 | 15 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.16 | 0 | 1.727e-11 | 1.077e-09 | 1.26e-10 | 5278 | 15 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.16 | 0 | 1.727e-11 | 1.077e-09 | 1.26e-10 | 5278 | 15 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.32 | 0 | 5.499e-11 | 8.68e-10 | 2.555e-10 | 4872 | 14 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.32 | 0 | 5.499e-11 | 8.68e-10 | 2.555e-10 | 4872 | 14 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s10 | 0.32 | 0 | 5.499e-11 | 8.68e-10 | 2.555e-10 | 4872 | 14 | 6 | 0 | 0 | 0 |
|
||||
|
||||
## A Alcubierre v9 s100 lower-bound stress (upper=0.004)
|
||||
|
||||
| case | min_step | mismatch | max_dn_ang | max_dgrel | max_dstopT | sum_rhs | max_rej | ESC | DARK | UNRES | INC |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| alc_v9_s100 | 1e-14 | 0 | 1.695e-11 | 1.332e-09 | 1.057e-11 | 18095 | 7 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s100 | 1e-12 | 0 | 1.695e-11 | 1.332e-09 | 1.057e-11 | 18095 | 7 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s100 | 1e-08 | 0 | 1.695e-11 | 1.332e-09 | 1.057e-11 | 18095 | 7 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s100 | 1e-06 | 0 | 1.695e-11 | 1.332e-09 | 1.057e-11 | 18095 | 7 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s100 | 1e-05 | 0 | 1.695e-11 | 1.332e-09 | 1.057e-11 | 18095 | 7 | 6 | 0 | 0 | 0 |
|
||||
| alc_v9_s100 | 0.0001 | 0 | 1.695e-11 | 1.332e-09 | 1.057e-11 | 18095 | 7 | 6 | 0 | 0 | 0 |
|
||||
|
||||
## B observed accepted step h (finite T=min(20, ref span))
|
||||
|
||||
| case | dir | ref | span | target | steps | reached | term | h_min | h_max | h_first | bnd | rhs | rej | null_max |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| r30_inward | 0 | DARK | 69.57 | -20 | 17 | 1 | -1 | 0.1 | 1.726 | 0.1 | 1 | 119 | 0 | 3.009e-12 |
|
||||
| r30_inward | 1 | ESC | 226 | -20 | 13 | 1 | -1 | 0.1 | 2 | 0.1 | 1 | 91 | 0 | 8.69e-12 |
|
||||
| r30_inward | 2 | DARK | 142.2 | -20 | 20 | 1 | -1 | 0.1 | 1.408 | 0.1 | 1 | 140 | 0 | 1.526e-11 |
|
||||
| r30_inward | 3 | ESC | 370.2 | -20 | 20 | 1 | -1 | 0.1 | 1.408 | 0.1 | 1 | 140 | 0 | 1.526e-11 |
|
||||
| r30_inward | 4 | DARK | 118.2 | -20 | 20 | 1 | -1 | 0.1 | 1.408 | 0.1 | 1 | 140 | 0 | 1.526e-11 |
|
||||
| r30_inward | 5 | ESC | 346.3 | -20 | 20 | 1 | -1 | 0.1 | 1.408 | 0.1 | 1 | 140 | 0 | 1.526e-11 |
|
||||
| r100_inward | 0 | DARK | 144.3 | -20 | 12 | 1 | -1 | 0.1 | 2 | 0.1 | 1 | 84 | 0 | 1.454e-14 |
|
||||
| r100_inward | 1 | ESC | 156 | -20 | 12 | 1 | -1 | 0.1 | 2 | 0.1 | 1 | 84 | 0 | 7.661e-15 |
|
||||
| r100_inward | 2 | DARK | 301.1 | -20 | 12 | 1 | -1 | 0.1 | 2 | 0.1 | 1 | 84 | 0 | 1.399e-14 |
|
||||
| r100_inward | 3 | DARK | 211 | -20 | 12 | 1 | -1 | 0.1 | 2 | 0.1 | 1 | 84 | 0 | 1.321e-14 |
|
||||
| r2p1_outward | 0 | ESC | 253.9 | -20 | 46 | 1 | -1 | 0.1 | 1.071 | 0.1 | 1 | 322 | 0 | 6.274e-11 |
|
||||
| r2p1_outward | 1 | ESC | 414.9 | -20 | 105 | 1 | -1 | 0.1 | 0.2115 | 0.1 | 1 | 735 | 0 | 4.698e-11 |
|
||||
| r2p1_outward | 2 | ESC | 333.5 | -20 | 105 | 1 | -1 | 0.1 | 0.2115 | 0.1 | 1 | 735 | 0 | 4.698e-11 |
|
||||
| r2p1_outward | 3 | DARK | 109.4 | -20 | 105 | 1 | -1 | 0.1 | 0.2115 | 0.1 | 1 | 735 | 0 | 4.698e-11 |
|
||||
| r2p1_outward | 4 | DARK | 32.25 | -20 | 37 | 1 | -1 | 0.1 | 0.8994 | 0.1 | 1 | 259 | 0 | 2.991e-11 |
|
||||
| r1p5_freefall | 0 | DARK | 30.66 | -20 | 49 | 1 | -1 | 0.1 | 0.696 | 0.1 | 1 | 343 | 0 | 4.938e-10 |
|
||||
| r1p5_freefall | 1 | ESC | 254.5 | -20 | 52 | 1 | -1 | 0.0921 | 1.084 | 0.1 | 1 | 364 | 0 | 4.034e-11 |
|
||||
| mink_moving | 0 | ESC | 51.26 | -20 | 3 | 1 | -1 | 1 | 14 | 1 | 1 | 21 | 0 | 2.22e-16 |
|
||||
| mink_moving | 1 | ESC | 71.58 | -20 | 3 | 1 | -1 | 1 | 14 | 1 | 1 | 21 | 0 | 0 |
|
||||
| alc_v3_s1 | 0 | ESC | 16.43 | -16.43 | 56 | 1 | -1 | 0.05 | 0.4 | 0.05 | 1 | 406 | 2 | 0 |
|
||||
| alc_v3_s1 | 1 | ESC | 29.38 | -20 | 62 | 1 | -1 | 0.05 | 0.4 | 0.05 | 1 | 441 | 1 | 0 |
|
||||
| alc_v9_s10 | 0 | ESC | 2.037 | -2.037 | 77 | 1 | -1 | 0.005 | 0.04 | 0.005 | 1 | 588 | 7 | 0 |
|
||||
| alc_v9_s10 | 1 | ESC | 19.96 | -19.96 | 521 | 1 | -1 | 0.005 | 0.04 | 0.005 | 1 | 3682 | 5 | 2.22e-16 |
|
||||
| alc_v9_s100 | 0 | ESC | 1.104 | -1.104 | 302 | 1 | -1 | 0.0005 | 0.004 | 0.0005 | 1 | 2163 | 7 | 0 |
|
||||
| alc_v9_s100 | 1 | ESC | 2.896 | -2.896 | 746 | 1 | -1 | 0.0005 | 0.004 | 0.0005 | 1 | 5257 | 5 | 2.22e-16 |
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
#!/usr/bin/env python3
|
||||
"""One-task, at-most-two-attempt 4K comparison (R100, 3840x2160, FOV45).
|
||||
|
||||
This driver does NOT run as part of routine verification. It refuses to do
|
||||
anything unless ``--authorize-two-4k`` is passed explicitly, and an attempt
|
||||
ledger makes the task non-repeatable. Any future execution requires a fresh,
|
||||
explicit user authorization for that task; authorization never extends to later
|
||||
tasks or routine tests.
|
||||
|
||||
Usage:
|
||||
run_4k_pair.py --authorize-two-4k [--out DIR]
|
||||
|
||||
OUT defaults to <repo>/local/adaptive_bounds_4k (distinct from any older
|
||||
one-off ledger). The renderer binary is expected at
|
||||
build/Release/schwarzschild_sky (see README for the make command).
|
||||
"""
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import shlex
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
from mesh_maps import load, compare
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
ENV = dict(os.environ, OMP_NUM_THREADS='16', OMP_DYNAMIC='FALSE')
|
||||
BUILD_CMD = 'make -j4 BUILD_TYPE=Release SPACETIME=schwarzschild backend'
|
||||
|
||||
REFUSAL = (
|
||||
'REFUSING TO RUN: the 4K hmax 2-vs-8 pair is a one-task, at-most-two-attempt '
|
||||
'experiment. Pass --authorize-two-4k only after an explicit fresh user '
|
||||
'authorization for this task. It is not a routine verification target.')
|
||||
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser(description=__doc__)
|
||||
ap.add_argument('--authorize-two-4k', action='store_true',
|
||||
help='explicit authorization for the two-attempt 4K pair')
|
||||
ap.add_argument('--out', default=str(ROOT / 'local/adaptive_bounds_4k'),
|
||||
help='output directory (default: local/adaptive_bounds_4k)')
|
||||
args = ap.parse_args()
|
||||
if not args.authorize_two_4k:
|
||||
print(REFUSAL, file=sys.stderr)
|
||||
return 2
|
||||
out = Path(args.out).resolve()
|
||||
binary = ROOT / 'build/Release/schwarzschild_sky'
|
||||
if not binary.exists():
|
||||
print(f'missing {binary}; build it first:\n {BUILD_CMD}',
|
||||
file=sys.stderr)
|
||||
return 2
|
||||
out.mkdir(parents=True, exist_ok=True)
|
||||
ledger = out / 'attempts.json'
|
||||
attempts = json.loads(ledger.read_text()) if ledger.exists() else []
|
||||
if attempts:
|
||||
print('This one-task pair has already been attempted; no reruns '
|
||||
'authorized.', file=sys.stderr)
|
||||
return 3
|
||||
catalog = out / 'single_dim_star.csv'
|
||||
catalog.write_text('longitude_deg,latitude_deg,temperature_K,amplitude\n'
|
||||
'262.5,-30,6000,1e-30\n')
|
||||
with (out / 'cpu.txt').open('w') as f:
|
||||
subprocess.run(['lscpu'], stdout=f, check=True)
|
||||
metadata = {
|
||||
'binary_sha256': hashlib.sha256(binary.read_bytes()).hexdigest(),
|
||||
'utc': time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime()),
|
||||
'source_sha256': {
|
||||
p: hashlib.sha256((ROOT / p).read_bytes()).hexdigest()
|
||||
for p in ('src/main.c', 'src/geodesic.c', 'src/frame.c')},
|
||||
'catalog': 'one negligible synthetic point; no survey catalog',
|
||||
'scope': 'README R100 45-degree 3840x2160 coarse16 refine4 jacobian0.2',
|
||||
'threads': 16, 'max_attempts': 2,
|
||||
'authorization': 'explicit --authorize-two-4k for this task only'}
|
||||
(out / 'metadata.json').write_text(json.dumps(metadata, indent=2) + '\n')
|
||||
maps = {}
|
||||
results = {}
|
||||
for upper in (2, 8):
|
||||
name = f'r100_4k_hmax{upper}'
|
||||
cmd = [str(binary), '--integrator', 'dp54', '--width', '3840',
|
||||
'--height', '2160', '--look-ra-deg', '262.5',
|
||||
'--look-dec-deg', '-30', '--fov-deg', '45',
|
||||
'--observer-radius', '100', '--coarse-cell-pixels', '16',
|
||||
'--refine-max-level', '4', '--refine-jacobian-min', '.2',
|
||||
'--catalog', str(catalog), '--exposure', '1',
|
||||
'--tone-map', 'reinhard', '--psf-min-y', '1e-20',
|
||||
'--psf-relative-tail', '1e-4', '--ode-min-step', '1e-12',
|
||||
'--ode-max-step', str(upper), '--verbose',
|
||||
'--lens-map-output', str(out / (name + '.grlens')),
|
||||
'--output', str(out / (name + '.png'))]
|
||||
attempts.append({'upper': upper, 'command': shlex.join(cmd),
|
||||
'state': 'attempted'})
|
||||
ledger.write_text(json.dumps(attempts, indent=2) + '\n')
|
||||
start = time.perf_counter()
|
||||
with (out / (name + '.log')).open('w') as log:
|
||||
log.write('OMP_NUM_THREADS=16 OMP_DYNAMIC=FALSE ' +
|
||||
shlex.join(cmd) + '\n')
|
||||
log.flush()
|
||||
result = subprocess.run(cmd, cwd=ROOT, env=ENV, stdout=log,
|
||||
stderr=subprocess.STDOUT, timeout=900)
|
||||
attempts[-1].update(returncode=result.returncode,
|
||||
wall_seconds=time.perf_counter() - start,
|
||||
state='completed')
|
||||
ledger.write_text(json.dumps(attempts, indent=2) + '\n')
|
||||
if result.returncode:
|
||||
raise SystemExit(f'4K attempt failed: {name}; no automatic retry.')
|
||||
info, maps[upper] = load(out / (name + '.grlens'))
|
||||
info['wall_seconds'] = attempts[-1]['wall_seconds']
|
||||
results[name] = info
|
||||
print(name, json.dumps(info), flush=True)
|
||||
results['comparison'] = compare(maps[2], maps[8])
|
||||
p, q = (results[f'r100_4k_hmax{h}']['provenance'] for h in (2, 8))
|
||||
assert p['max_step'] == 2 and q['max_step'] == 8
|
||||
assert {k: v for k, v in p.items() if k != 'max_step'} == \
|
||||
{k: v for k, v in q.items() if k != 'max_step'}
|
||||
print('comparison', json.dumps(results['comparison']), flush=True)
|
||||
(out / 'summary.json').write_text(json.dumps(results, indent=2) + '\n')
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
# Run the standalone critical-classification reference check
|
||||
# (benchmarks/adaptive_step_bounds_2026-10-05/critical_ref_check.c).
|
||||
#
|
||||
# benchmarks/adaptive_step_bounds_2026-10-05/run_critical_ref.sh [OUT_DIR]
|
||||
#
|
||||
# OUT_DIR defaults to <repo>/local/adaptive_step_bounds_2026-10-05. All output
|
||||
# stays under OUT_DIR; the tracked benchmark directory holds only the sources.
|
||||
# This is a diagnostic probe (see the C file header); it makes no pass/fail
|
||||
# claim about the exactly-critical physical outcome.
|
||||
set -euo pipefail
|
||||
|
||||
SOURCE=$(cd "$(dirname "$0")" && pwd)
|
||||
root=$(cd "$SOURCE/../.." && pwd)
|
||||
OUT=${1:-$root/local/adaptive_step_bounds_2026-10-05}
|
||||
BIN=/tmp/opencode/step_bounds
|
||||
|
||||
mkdir -p "$OUT/raw" "$OUT/logs" "$BIN"
|
||||
cd "$OUT"
|
||||
OUT=$PWD
|
||||
|
||||
{
|
||||
echo "### building critical_ref_check"
|
||||
set -x
|
||||
cc -std=c11 -O2 -Wall -Wextra -Wpedantic -I"$root/src" \
|
||||
"$SOURCE/critical_ref_check.c" "$root/src/geodesic.c" \
|
||||
"$root/src/asymptotic.c" "$root/src/asymptotic_schwarzschild.c" \
|
||||
"$root/src/spacetime_common.c" "$root/src/observer.c" -lm \
|
||||
-o "$BIN/critical_ref_check"
|
||||
echo "### command: critical_ref_check"
|
||||
time "$BIN/critical_ref_check"
|
||||
set +x
|
||||
} > logs/critical_ref.log 2>&1
|
||||
|
||||
cat logs/critical_ref.log
|
||||
echo "outputs under $OUT"
|
||||
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build and run the failure-path floor diagnostic.
|
||||
#
|
||||
# benchmarks/adaptive_step_bounds_2026-10-05/run_failure_floor.sh [OUT_DIR]
|
||||
#
|
||||
# OUT_DIR defaults to <repo>/local/adaptive_bounds_mesh. All output stays
|
||||
# under OUT_DIR; the tracked benchmark directory holds only the sources.
|
||||
#
|
||||
# failure_floor.c includes ../../tests/test_geodesic_adaptive.c (depth-2 path
|
||||
# valid from this directory) and therefore requires -DGEODESIC_EVENT_TESTING
|
||||
# and the production RayPool source src/ray.c. The two analytic backends are
|
||||
# textually included by the regression file, so they are not linked here.
|
||||
set -euo pipefail
|
||||
|
||||
SOURCE=$(cd "$(dirname "$0")" && pwd)
|
||||
root=$(cd "$SOURCE/../.." && pwd)
|
||||
OUT=${1:-$root/local/adaptive_bounds_mesh}
|
||||
BIN=/tmp/opencode/step_bounds
|
||||
|
||||
mkdir -p "$OUT/logs" "$BIN"
|
||||
cd "$OUT"
|
||||
|
||||
{
|
||||
set -x
|
||||
cc -std=c11 -O2 -Wall -Wextra -Wpedantic -fopenmp -DGEODESIC_EVENT_TESTING \
|
||||
-I"$root/src" \
|
||||
"$SOURCE/failure_floor.c" "$root/src/geodesic.c" "$root/src/ray.c" \
|
||||
"$root/src/spacetime_common.c" "$root/src/observer.c" \
|
||||
"$root/src/asymptotic.c" "$root/src/asymptotic_schwarzschild.c" -lm \
|
||||
-o "$BIN/failure_floor"
|
||||
"$BIN/failure_floor"
|
||||
set +x
|
||||
} > logs/failure_floor.log 2>&1
|
||||
|
||||
cat logs/failure_floor.log
|
||||
echo "outputs under $OUT"
|
||||
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env bash
|
||||
# Long-term reproduction driver for the adaptive step-bound scan (Experiment A/B).
|
||||
#
|
||||
# benchmarks/adaptive_step_bounds_2026-10-05/run_limited.sh [OUT_DIR]
|
||||
#
|
||||
# OUT_DIR defaults to <repo>/local/adaptive_step_bounds_2026-10-05. All build
|
||||
# and run output — env/hash record, build log, stdout logs and per-ray CSV —
|
||||
# is written under OUT_DIR, never into this tracked benchmark directory.
|
||||
# Scratch binaries go to /tmp/opencode/step_bounds.
|
||||
set -euo pipefail
|
||||
|
||||
SOURCE=$(cd "$(dirname "$0")" && pwd)
|
||||
root=$(cd "$SOURCE/../.." && pwd)
|
||||
OUT=${1:-$root/local/adaptive_step_bounds_2026-10-05}
|
||||
BIN=/tmp/opencode/step_bounds
|
||||
|
||||
mkdir -p "$OUT/raw" "$OUT/logs" "$BIN"
|
||||
cd "$OUT"
|
||||
OUT=$PWD
|
||||
|
||||
SRC_COMMON="$root/src/geodesic.c $root/src/asymptotic.c \
|
||||
$root/src/asymptotic_schwarzschild.c $root/src/spacetime_common.c \
|
||||
$root/src/observer.c"
|
||||
|
||||
# --- environment + source identity (full shell output) --------------------
|
||||
{
|
||||
echo "# adaptive_step_bounds_2026-10-05 environment and source identity"
|
||||
echo "date_utc: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
||||
echo "host: $(uname -a)"
|
||||
echo "nproc: $(nproc)"
|
||||
echo "cc:"; cc --version
|
||||
echo
|
||||
echo "git_head: $(git -C "$root" rev-parse HEAD 2>/dev/null || echo none)"
|
||||
echo "git_status_short:"; git -C "$root" status --short 2>/dev/null || true
|
||||
echo
|
||||
echo "# sha256 of the production sources consumed by the harnesses"
|
||||
sha256sum $SRC_COMMON
|
||||
echo
|
||||
echo "# sha256 of the benchmark harnesses"
|
||||
sha256sum "$SOURCE/a_public_endpoints.c" "$SOURCE/b_actual_h.c" \
|
||||
"$SOURCE/summarize.py" "$SOURCE/run_limited.sh"
|
||||
} > logs/env.txt 2>&1
|
||||
cat logs/env.txt
|
||||
|
||||
# --- build ----------------------------------------------------------------
|
||||
{
|
||||
echo "### building a_public_endpoints"
|
||||
set -x
|
||||
cc -std=c11 -O2 -Wall -Wextra -Wpedantic -I"$root/src" \
|
||||
"$SOURCE/a_public_endpoints.c" $SRC_COMMON -lm -o "$BIN/a_public"
|
||||
echo "### building b_actual_h"
|
||||
cc -std=c11 -O2 -Wall -Wextra -Wpedantic -I"$root/src" \
|
||||
"$SOURCE/b_actual_h.c" "$root/src/asymptotic.c" \
|
||||
"$root/src/asymptotic_schwarzschild.c" "$root/src/spacetime_common.c" \
|
||||
"$root/src/observer.c" -lm -o "$BIN/b_actual"
|
||||
set +x
|
||||
} > logs/build.log 2>&1
|
||||
cat logs/build.log
|
||||
|
||||
# --- Experiment A ---------------------------------------------------------
|
||||
{
|
||||
echo "### command: a_public schwarzschild"
|
||||
set -x; time "$BIN/a_public" schwarzschild; set +x
|
||||
echo "### command: a_public minkowski"
|
||||
set -x; time "$BIN/a_public" minkowski; set +x
|
||||
echo "### command: a_public alcubierre"
|
||||
set -x; time "$BIN/a_public" alcubierre; set +x
|
||||
} > logs/expA.log 2>&1
|
||||
grep -E '^(SUMMARY|TOTAL_RAYS|real|user)' logs/expA.log | tail -20
|
||||
|
||||
# --- Experiment B ---------------------------------------------------------
|
||||
{
|
||||
echo "### command: b_actual"
|
||||
set -x; time "$BIN/b_actual"; set +x
|
||||
} > logs/expB.log 2>&1
|
||||
cat logs/expB.log
|
||||
|
||||
# --- summary tables -------------------------------------------------------
|
||||
python3 "$SOURCE/summarize.py" "$OUT"
|
||||
|
||||
echo
|
||||
echo "rays A = $(grep '^TOTAL_RAYS' logs/expA.log | awk '{s+=$2} END{print s}')"
|
||||
echo "observed steps B = $(grep '^TOTAL_OBSERVED_STEPS' logs/expB.log | awk '{print $2}')"
|
||||
echo "outputs under $OUT"
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Bounded 320x180 adaptive-mesh candidates (8 cases; no 4K, no references).
|
||||
|
||||
Usage:
|
||||
run_mesh.py [OUT_DIR]
|
||||
|
||||
OUT_DIR defaults to <repo>/local/adaptive_bounds_mesh. The renderer binary is
|
||||
expected to already exist at build/Release/schwarzschild_sky; build it with
|
||||
(make command is also in README.md):
|
||||
|
||||
make -j4 BUILD_TYPE=Release SPACETIME=schwarzschild backend
|
||||
|
||||
No survey catalog is used: the script writes a one-point synthetic dim catalog
|
||||
with the required column header (longitude_deg,latitude_deg,temperature_K,
|
||||
amplitude) and a 1e-30 amplitude star. No external CSV is read.
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import shlex
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
from mesh_maps import load, compare # tracked sibling module (no local/ import)
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
OUT = Path(sys.argv[1]).resolve() if len(sys.argv) > 1 else \
|
||||
ROOT / 'local/adaptive_bounds_mesh'
|
||||
BIN = ROOT / 'build/Release/schwarzschild_sky'
|
||||
BUILD_CMD = 'make -j4 BUILD_TYPE=Release SPACETIME=schwarzschild backend'
|
||||
ENV = dict(os.environ, OMP_NUM_THREADS='8', OMP_DYNAMIC='FALSE')
|
||||
|
||||
|
||||
def scene_args(scene):
|
||||
if scene == 'r100':
|
||||
return ['--observer-radius', '100', '--look-ra-deg', '262.5',
|
||||
'--look-dec-deg', '-30', '--fov-deg', '45',
|
||||
'--refine-jacobian-min', '.2']
|
||||
return ['--observer-position', '2.1', '0', '0', '--observer-velocity',
|
||||
'0', '0', '0', '--look-ra-deg', '0', '--look-dec-deg', '0',
|
||||
'--fov-deg', '90']
|
||||
|
||||
|
||||
def main():
|
||||
if not BIN.exists():
|
||||
raise SystemExit(f'missing {BIN}; build it first:\n {BUILD_CMD}')
|
||||
OUT.mkdir(parents=True, exist_ok=True)
|
||||
catalog = OUT / 'single_dim_star.csv'
|
||||
catalog.write_text('longitude_deg,latitude_deg,temperature_K,amplitude\n'
|
||||
'262.5,-30,6000,1e-30\n')
|
||||
results = {}
|
||||
for scene in ('r100', 'r2p1'):
|
||||
meshes = {}
|
||||
for upper in (.5, 2, 8, 32):
|
||||
name = f'{scene}_hmax{upper:g}'
|
||||
cmd = [str(BIN), '--integrator', 'dp54',
|
||||
'--width', '320', '--height', '180',
|
||||
'--coarse-cell-pixels', '8', '--refine-max-level', '3',
|
||||
'--catalog', str(catalog), '--exposure', '1',
|
||||
'--psf-min-y', '1e-20', '--psf-relative-tail', '1e-4',
|
||||
'--ode-min-step', '1e-12', '--ode-max-step', str(upper),
|
||||
'--verbose', '--lens-map-output', str(OUT / (name + '.grlens')),
|
||||
'--output', str(OUT / (name + '.png')), *scene_args(scene)]
|
||||
start = time.perf_counter()
|
||||
with (OUT / (name + '.log')).open('w') as log:
|
||||
log.write('OMP_NUM_THREADS=8 OMP_DYNAMIC=FALSE ' +
|
||||
shlex.join(cmd) + '\n')
|
||||
log.flush()
|
||||
subprocess.run(cmd, cwd=ROOT, env=ENV, stdout=log,
|
||||
stderr=subprocess.STDOUT, check=True, timeout=180)
|
||||
info, meshes[upper] = load(OUT / (name + '.grlens'))
|
||||
info['wall_seconds'] = time.perf_counter() - start
|
||||
results[name] = info
|
||||
print(name, json.dumps(info), flush=True)
|
||||
for upper in (.5, 8, 32):
|
||||
comparison = compare(meshes[2], meshes[upper])
|
||||
results[f'{scene}_2_vs_{upper:g}'] = comparison
|
||||
print(f'{scene} 2 vs {upper:g}', json.dumps(comparison), flush=True)
|
||||
(OUT / 'summary.json').write_text(json.dumps(results, indent=2) + '\n')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Two bounded tight-tolerance mesh references and comparisons (no 4K).
|
||||
|
||||
Usage:
|
||||
run_mesh_reference.py [OUT_DIR]
|
||||
|
||||
OUT_DIR defaults to <repo>/local/adaptive_bounds_mesh and must already contain
|
||||
the eight ``<scene>_hmax<h>.grlens`` maps from ``run_mesh.py``. The renderer
|
||||
binary is expected at build/Release/schwarzschild_sky (see README for the make
|
||||
command). Same one-point synthetic dim catalog, no external CSV.
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import shlex
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
from mesh_maps import load, compare
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
OUT = Path(sys.argv[1]).resolve() if len(sys.argv) > 1 else \
|
||||
ROOT / 'local/adaptive_bounds_mesh'
|
||||
BIN = ROOT / 'build/Release/schwarzschild_sky'
|
||||
BUILD_CMD = 'make -j4 BUILD_TYPE=Release SPACETIME=schwarzschild backend'
|
||||
ENV = dict(os.environ, OMP_NUM_THREADS='8', OMP_DYNAMIC='FALSE')
|
||||
|
||||
|
||||
def scene_args(scene):
|
||||
if scene == 'r100':
|
||||
return ['--observer-radius', '100', '--look-ra-deg', '262.5',
|
||||
'--look-dec-deg', '-30', '--fov-deg', '45',
|
||||
'--refine-jacobian-min', '.2']
|
||||
return ['--observer-position', '2.1', '0', '0', '--observer-velocity',
|
||||
'0', '0', '0', '--look-ra-deg', '0', '--look-dec-deg', '0',
|
||||
'--fov-deg', '90']
|
||||
|
||||
|
||||
def main():
|
||||
if not BIN.exists():
|
||||
raise SystemExit(f'missing {BIN}; build it first:\n {BUILD_CMD}')
|
||||
OUT.mkdir(parents=True, exist_ok=True)
|
||||
catalog = OUT / 'single_dim_star.csv'
|
||||
if not catalog.exists():
|
||||
catalog.write_text('longitude_deg,latitude_deg,temperature_K,amplitude\n'
|
||||
'262.5,-30,6000,1e-30\n')
|
||||
results = {}
|
||||
for scene in ('r100', 'r2p1'):
|
||||
name = scene + '_tight_reference'
|
||||
cmd = [str(BIN), '--integrator', 'dp54', '--width', '320',
|
||||
'--height', '180', '--coarse-cell-pixels', '8',
|
||||
'--refine-max-level', '3', '--catalog', str(catalog),
|
||||
'--exposure', '1', '--psf-min-y', '1e-20',
|
||||
'--psf-relative-tail', '1e-4', '--ode-min-step', '1e-12',
|
||||
'--ode-max-step', '.5', '--ode-rtol', '1e-12',
|
||||
'--ode-atol-x', '1e-12', '--ode-atol-pi', '1e-12',
|
||||
'--ode-atol-l', '1e-12', '--verbose',
|
||||
'--lens-map-output', str(OUT / (name + '.grlens')),
|
||||
'--output', str(OUT / (name + '.png')), *scene_args(scene)]
|
||||
start = time.perf_counter()
|
||||
with (OUT / (name + '.log')).open('w') as log:
|
||||
log.write('OMP_NUM_THREADS=8 OMP_DYNAMIC=FALSE ' +
|
||||
shlex.join(cmd) + '\n')
|
||||
log.flush()
|
||||
subprocess.run(cmd, cwd=ROOT, env=ENV, stdout=log,
|
||||
stderr=subprocess.STDOUT, check=True, timeout=180)
|
||||
info, ref = load(OUT / (name + '.grlens'))
|
||||
info['wall_seconds'] = time.perf_counter() - start
|
||||
results[name] = info
|
||||
print(name, json.dumps(info), flush=True)
|
||||
for upper in (.5, 2, 8, 32):
|
||||
_, vertices = load(OUT / f'{scene}_hmax{upper:g}.grlens')
|
||||
result = compare(ref, vertices)
|
||||
results[f'{scene}_ref_vs_{upper:g}'] = result
|
||||
print(scene, 'ref vs', upper, json.dumps(result), flush=True)
|
||||
(OUT / 'reference_summary.json').write_text(
|
||||
json.dumps(results, indent=2) + '\n')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,261 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Summarise the adaptive-step-bounds benchmark raw CSV logs.
|
||||
|
||||
Usage:
|
||||
summarize.py [OUT_DIR]
|
||||
|
||||
Reads ``OUT_DIR/raw/*.csv`` (written by ``run_limited.sh``) and writes
|
||||
``OUT_DIR/logs/summary.txt``. It has no dependency on any untracked script or
|
||||
on older local data.
|
||||
|
||||
Defaults: OUT_DIR = <repo>/local/adaptive_step_bounds_2026-10-05, derived from
|
||||
this file's location (benchmarks/adaptive_step_bounds_2026-10-05/).
|
||||
"""
|
||||
import csv
|
||||
import math
|
||||
import os
|
||||
import sys
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
ROOT = os.path.dirname(os.path.dirname(HERE))
|
||||
DEFAULT_OUT = os.path.join(ROOT, "local", "adaptive_step_bounds_2026-10-05")
|
||||
|
||||
OUTCOME = {0: "ESC", 1: "DARK", 2: "UNRES", 3: "INC"}
|
||||
REASON = {
|
||||
0: "NONE",
|
||||
1: "REDSHIFT",
|
||||
2: "BUDGET",
|
||||
3: "TIMERANGE",
|
||||
4: "DOMAIN",
|
||||
5: "INVMETRIC",
|
||||
6: "INTEGERR",
|
||||
7: "UNSUPPORTED",
|
||||
8: "PROTOCOL",
|
||||
9: "IO",
|
||||
}
|
||||
|
||||
|
||||
def fnum(v):
|
||||
if v is None or v == "" or v == "nan":
|
||||
return math.nan
|
||||
return float(v)
|
||||
|
||||
|
||||
def fmt(v):
|
||||
if isinstance(v, float):
|
||||
if math.isnan(v):
|
||||
return "nan"
|
||||
if v == 0:
|
||||
return "0"
|
||||
return f"{v:.4g}"
|
||||
return str(v)
|
||||
|
||||
|
||||
def table(title, header, recs):
|
||||
lines = [f"## {title}", ""]
|
||||
lines.append("| " + " | ".join(header) + " |")
|
||||
lines.append("|" + "|".join(["---"] * len(header)) + "|")
|
||||
for r in recs:
|
||||
lines.append("| " + " | ".join(fmt(x) for x in r) + " |")
|
||||
lines.append("")
|
||||
return lines
|
||||
|
||||
|
||||
def ang_between(a, b):
|
||||
va = [fnum(a["nx"]), fnum(a["ny"]), fnum(a["nz"])]
|
||||
vb = [fnum(b["nx"]), fnum(b["ny"]), fnum(b["nz"])]
|
||||
na = math.sqrt(sum(x * x for x in va))
|
||||
nb = math.sqrt(sum(x * x for x in vb))
|
||||
if not (na > 0 and nb > 0):
|
||||
return math.nan
|
||||
cross = (va[1]*vb[2]-va[2]*vb[1],
|
||||
va[2]*vb[0]-va[0]*vb[2],
|
||||
va[0]*vb[1]-va[1]*vb[0])
|
||||
dot = sum(x * y for x, y in zip(va, vb))
|
||||
return math.atan2(math.sqrt(sum(x*x for x in cross)), dot)
|
||||
|
||||
|
||||
class Raw:
|
||||
def __init__(self, out_dir):
|
||||
self.raw = os.path.join(out_dir, "raw")
|
||||
self.logs = os.path.join(out_dir, "logs")
|
||||
|
||||
def rows(self, name):
|
||||
with open(os.path.join(self.raw, name)) as f:
|
||||
return list(csv.DictReader(f))
|
||||
|
||||
|
||||
def summarise_agg(raw, name, title, keycol):
|
||||
recs = raw.rows(name)
|
||||
out = []
|
||||
for r in recs:
|
||||
out.append((r["case"], float(r[keycol]), int(r["class_mismatch"]),
|
||||
fnum(r["max_dn_ang"]), fnum(r["max_dgrel"]),
|
||||
fnum(r["max_dstopT"]), int(r["sum_rhs"]),
|
||||
int(r["max_rejected"]), int(r["escaped"]), int(r["dark"]),
|
||||
int(r["unresolved"]), int(r["incomplete"])))
|
||||
out.sort(key=lambda x: (x[0], x[1]))
|
||||
return table(title,
|
||||
["case", keycol, "mismatch", "max_dn_ang", "max_dgrel",
|
||||
"max_dstopT", "sum_rhs", "max_rej", "ESC", "DARK", "UNRES",
|
||||
"INC"], out)
|
||||
|
||||
|
||||
def build(raw):
|
||||
lines = ["# Adaptive-step-bounds benchmark summary tables", ""]
|
||||
|
||||
ref = raw.rows("a_sch_reference.csv")
|
||||
recs = []
|
||||
for r in ref:
|
||||
recs.append((r["case"], int(r["dir"]), fnum(r["theta"]),
|
||||
OUTCOME[int(r["outcome"])], REASON[int(r["reason"])],
|
||||
fnum(r["stop_t"]), int(r["steps"]), int(r["rejected"]),
|
||||
int(r["rhs"]), fnum(r["g"]), fnum(r["thr"])))
|
||||
lines += table("A Schwarzschild references (DP tol=1e-12, max_step=0.25)",
|
||||
["case", "dir", "theta", "outcome", "reason", "stop_t",
|
||||
"steps", "rej", "rhs", "g", "thr"], recs)
|
||||
|
||||
lines += summarise_agg(raw, "a_sch_upper_summary.csv",
|
||||
"A Schwarzschild upper scan (min_step=1e-12, "
|
||||
"tol=1e-9)", "upper")
|
||||
lines += summarise_agg(raw, "a_sch_min_summary.csv",
|
||||
"A Schwarzschild min scan (max_step=2, tol=1e-9)",
|
||||
"min_step")
|
||||
|
||||
rk = raw.rows("a_sch_rk4_sensitive.csv")
|
||||
groups = {}
|
||||
for r in rk:
|
||||
groups.setdefault((r["case"], r["dir"]), {})[r["phase"]] = r
|
||||
recs = []
|
||||
for (case, d), gg in sorted(groups.items()):
|
||||
a = gg.get("rk4_0.01")
|
||||
b = gg.get("rk4_0.005")
|
||||
if not a or not b:
|
||||
continue
|
||||
dn = math.nan if a["outcome"] != b["outcome"] else ang_between(a, b)
|
||||
dg = (math.nan if a["outcome"] != b["outcome"]
|
||||
else abs(fnum(a["g"]) - fnum(b["g"])))
|
||||
recs.append((case, d, fnum(a["theta"]), OUTCOME[int(a["outcome"])],
|
||||
OUTCOME[int(b["outcome"])], dn, dg, int(a["rhs"]),
|
||||
int(b["rhs"])))
|
||||
lines += table("A Schwarzschild sensitive RK4 .01 vs .005",
|
||||
["case", "dir", "theta", "out.01", "out.005",
|
||||
"hhalve_dn_ang", "|dg|", "rhs.01", "rhs.005"], recs)
|
||||
|
||||
mk = raw.rows("a_mink_analytic.csv")
|
||||
mkx = raw.rows("a_mink_analytic_x.csv")
|
||||
groups = {}
|
||||
for r in mk:
|
||||
groups.setdefault((r["upper"], r["min_step"]), []).append(r)
|
||||
recs = []
|
||||
for (u, f), g in sorted(groups.items(),
|
||||
key=lambda kv: (float(kv[0][0]), float(kv[0][1]))):
|
||||
recs.append((u, f, len(g), max(fnum(r["dn_ang"]) for r in g),
|
||||
max(fnum(r["dgrel"]) for r in g),
|
||||
max(fnum(r["t_err"]) for r in g)))
|
||||
lines += table("A Minkowski flat analytic check (n_inf and t)",
|
||||
["upper", "min_step", "n", "max_dn_ang", "max_dgrel",
|
||||
"max_t_err"], recs)
|
||||
groups = {}
|
||||
for r in mkx:
|
||||
groups.setdefault((r["upper"], r["min_step"]), []).append(r)
|
||||
recs = []
|
||||
for (u, f), g in sorted(groups.items(),
|
||||
key=lambda kv: (float(kv[0][0]), float(kv[0][1]))):
|
||||
maxx = max(max(fnum(r["x_err_x"]), fnum(r["x_err_y"]),
|
||||
fnum(r["x_err_z"])) for r in g)
|
||||
recs.append((u, f, len(g), maxx, max(fnum(r["t_err"]) for r in g)))
|
||||
lines += table("A Minkowski flat analytic check (crossing x and t)",
|
||||
["upper", "min_step", "n", "max_x_err", "max_t_err"], recs)
|
||||
|
||||
for case in ["alc_v3_s1", "alc_v3_s10", "alc_v9_s1", "alc_v9_s10"]:
|
||||
lines += summarise_agg(raw, f"a_alc_{case}_upper_summary.csv",
|
||||
f"A Alcubierre {case} upper scan", "upper")
|
||||
lines += summarise_agg(raw, "a_alc_v9_s100_min_summary.csv",
|
||||
"A Alcubierre v9 s100 lower-bound stress "
|
||||
"(upper=0.004)", "min_step")
|
||||
|
||||
b = raw.rows("b_summary.csv")
|
||||
recs = []
|
||||
for r in b:
|
||||
recs.append((r["case"], int(r["dir"]),
|
||||
OUTCOME[int(r["ref_outcome"])], fnum(r["span"]),
|
||||
fnum(r["target"]), int(r["observed_steps"]),
|
||||
int(r["reached_target"]),
|
||||
REASON.get(int(r["terminated_reason"]),
|
||||
r["terminated_reason"]),
|
||||
fnum(r["h_min"]), fnum(r["h_max"]), fnum(r["h_first"]),
|
||||
int(r["boundary_steps"]), int(r["sum_rhs"]),
|
||||
int(r["sum_reject"]), fnum(r["null_residual_max"])))
|
||||
lines += table("B observed accepted step h (finite T=min(20, ref span))",
|
||||
["case", "dir", "ref", "span", "target", "steps", "reached",
|
||||
"term", "h_min", "h_max", "h_first", "bnd", "rhs", "rej",
|
||||
"null_max"], recs)
|
||||
|
||||
if os.path.exists(os.path.join(raw.raw, "critical_ref.csv")):
|
||||
lines += critical_section(raw)
|
||||
return lines
|
||||
|
||||
|
||||
def critical_section(raw):
|
||||
rows = raw.rows("critical_ref.csv")
|
||||
key = {}
|
||||
for r in rows:
|
||||
key[(r["camera"], int(r["dir"]), r["cfg"])] = r
|
||||
lines = table("critical reference check (raw rows)",
|
||||
["camera", "dir", "theta", "cfg", "outcome", "reason",
|
||||
"end_id", "stop_t", "steps", "rejected", "rhs", "g", "thr",
|
||||
"L", "L0"],
|
||||
[(r["camera"], int(r["dir"]), fnum(r["theta"]), r["cfg"],
|
||||
OUTCOME[int(r["outcome"])], REASON[int(r["reason"])],
|
||||
r["end_id"], fnum(r["stop_t"]), int(r["steps"]),
|
||||
int(r["rejected"]), int(r["rhs"]), fnum(r["g"]),
|
||||
fnum(r["thr"]), fnum(r.get("L")), fnum(r.get("L0")))
|
||||
for r in rows])
|
||||
# pair comparisons
|
||||
pairs = [("ref_tol1e-12_h0.25", "ref_tol1e-13_h0.125"),
|
||||
("tol1e-11_h2", "tol1e-11_h8"),
|
||||
("ref_tol1e-12_h0.25", "tol1e-11_h2"),
|
||||
("ref_tol1e-12_h0.25", "tol1e-11_h8")]
|
||||
for a_cfg, b_cfg in pairs:
|
||||
recs = []
|
||||
for (cam, di, cfg), a in sorted(key.items()):
|
||||
if cfg != a_cfg:
|
||||
continue
|
||||
b = key.get((cam, di, b_cfg))
|
||||
if not b:
|
||||
continue
|
||||
same = a["outcome"] == b["outcome"]
|
||||
dn = ang_between(a, b) if same else math.nan
|
||||
dg = (math.nan if not same else
|
||||
abs(fnum(a["g"]) / fnum(b["g"]) - 1.0)
|
||||
if fnum(a["g"]) > 0 and fnum(b["g"]) > 0 else math.nan)
|
||||
dstop = (fnum(a["stop_t"]) - fnum(b["stop_t"])
|
||||
if fnum(a["stop_t"]) == fnum(a["stop_t"]) and
|
||||
fnum(b["stop_t"]) == fnum(b["stop_t"]) else math.nan)
|
||||
dmar = (fnum(a["thr"]) - fnum(b["thr"])
|
||||
if fnum(a["thr"]) == fnum(a["thr"]) and
|
||||
fnum(b["thr"]) == fnum(b["thr"]) else math.nan)
|
||||
recs.append((cam, di, fnum(a["theta"]),
|
||||
OUTCOME[int(a["outcome"])], OUTCOME[int(b["outcome"])],
|
||||
same, dn, dg, dstop, dmar))
|
||||
lines += table(f"critical pair {a_cfg} vs {b_cfg}",
|
||||
["camera", "dir", "theta", "a", "b", "same",
|
||||
"dn_ang", "dgrel", "dstop_t", "dthr"], recs)
|
||||
return lines
|
||||
|
||||
|
||||
def main(argv):
|
||||
out = argv[1] if len(argv) > 1 else DEFAULT_OUT
|
||||
raw = Raw(out)
|
||||
os.makedirs(raw.logs, exist_ok=True)
|
||||
lines = build(raw)
|
||||
path = os.path.join(raw.logs, "summary.txt")
|
||||
with open(path, "w") as f:
|
||||
f.write("\n".join(lines) + "\n")
|
||||
print(f"wrote {path} ({len(lines)} lines)")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main(sys.argv))
|
||||
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Postprocess existing 4K/limited maps only; never invokes a renderer.
|
||||
|
||||
Usage:
|
||||
summarize_4k.py [OUT_DIR]
|
||||
|
||||
OUT_DIR defaults to <repo>/local/adaptive_bounds_4k and must contain
|
||||
``r100_4k_hmax2.grlens``, ``r100_4k_hmax8.grlens`` and ``attempts.json``.
|
||||
Writes summary.json in OUT_DIR.
|
||||
|
||||
Cost scope note: accepted/rejected/RHS sums cover the final persistent map
|
||||
vertices only. Nonpersistent discarded refinement probes are not stored in the
|
||||
v3 map, so these sums are not full-render executed RHS totals.
|
||||
"""
|
||||
import json
|
||||
import re
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
from mesh_maps import load, compare
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
OUT = Path(sys.argv[1]).resolve() if len(sys.argv) > 1 else \
|
||||
ROOT / 'local/adaptive_bounds_4k'
|
||||
|
||||
|
||||
def main():
|
||||
summaries = {}
|
||||
meshes = {}
|
||||
for upper in (2, 8):
|
||||
name = f'r100_4k_hmax{upper}'
|
||||
summaries[name], meshes[upper] = load(OUT / (name + '.grlens'))
|
||||
text = (OUT / (name + '.log')).read_text()
|
||||
initial = int(re.search(r'tracing (\d+) initial rays', text).group(1))
|
||||
generations = [int(n) for n in re.findall(
|
||||
r'refinement generation \d+ tracing (\d+) samples', text)]
|
||||
summaries[name]['requested_samples_including_nonpersistent_probes'] = \
|
||||
initial + sum(generations)
|
||||
summaries[name]['initial_samples'] = initial
|
||||
summaries[name]['refinement_samples_per_generation'] = generations
|
||||
summaries[name]['trace_wall_seconds'] = sum(
|
||||
float(x) for x in re.findall(
|
||||
r'(?:initial ray trace|adaptive ray-trace refinement) '
|
||||
r'finished in ([\d.]+) s', text))
|
||||
ledger = OUT / 'attempts.json'
|
||||
if ledger.exists():
|
||||
for entry in json.loads(ledger.read_text()):
|
||||
if entry.get('state') == 'completed':
|
||||
summaries[f'r100_4k_hmax{entry["upper"]}']['wall_seconds'] = \
|
||||
entry['wall_seconds']
|
||||
summaries['comparison'] = compare(meshes[2], meshes[8])
|
||||
a, b = (summaries[f'r100_4k_hmax{upper}'] for upper in (2, 8))
|
||||
summaries['relative_reduction'] = {
|
||||
key: 1 - b[key] / a[key]
|
||||
for key in ('accepted', 'rhs', 'wall_seconds', 'trace_wall_seconds')}
|
||||
summaries['comparison']['triangle_payload_identical'] = \
|
||||
a['triangle_sha256'] == b['triangle_sha256']
|
||||
summaries['cost_scope'] = (
|
||||
'accepted/rejected/RHS sums cover final persistent vertices only; '
|
||||
'nonpersistent discarded refinement probes are not in the v3 map. '
|
||||
'Do not interpret them as full-render executed RHS totals.')
|
||||
(OUT / 'summary.json').write_text(json.dumps(summaries, indent=2) + '\n')
|
||||
print(json.dumps(summaries, indent=2))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in new issue
Block a user