Files
GR-raytracing/src/asymptotic_gl48.h
T
wyj 09a7417961 Feat: Add directed asymptotic escape and analytic Schwarzschild exterior
Replace radius-only escape termination with a common asymptotic exterior protocol: declared ends, moving escape worldtubes, directed inside->outside crossings, and a PENDING_ENTRY lifecycle shared by single-frame and movie tracing.

Add an analytic Carlson-integral Schwarzschild monopole exterior (angle primitive, bracketed turning radius, ingoing Kerr-Schild coordinate-time transfer, conserved-energy frequency) so a camera outside the escape sphere is traced through an entry event.

Make the lifecycle tri-state (no ends / ready / protocol error), carry end_id through the endpoint and lens mesh, validate sources in constructors via spacetime_source_finalize(), and refresh the Schwarzschild reference images for the corrected finish.
2026-10-04 03:32:28 -04:00

43 lines
2.6 KiB
C

#ifndef ASYMPTOTIC_GL48_H
#define ASYMPTOTIC_GL48_H
/* 48-point Gauss-Legendre nodes and weights on [-1, 1], used only for the
* bounded residual of the Schwarzschild coordinate-time transfer. Generated
* with numpy.polynomial.legendre.leggauss(48); double precision. */
static const double gl48_nodes[48] = {
-0.99877100725242607, -0.99353017226635076, -0.98412458372282685,
-0.97059159254624727, -0.9529877031604308, -0.93138669070655433,
-0.90587913671556963, -0.87657202027424785, -0.84358826162439349,
-0.80706620402944262, -0.76715903251574036, -0.72403413092381463,
-0.67787237963266389, -0.6288673967765136, -0.57722472608397268,
-0.523160974722233, -0.46690290475095841, -0.40868648199071672,
-0.34875588629216075, -0.28736248735545555, -0.22476379039468905,
-0.16122235606889174, -0.097004699209462697, -0.032380170962869367,
0.032380170962869367, 0.097004699209462697, 0.16122235606889174,
0.22476379039468905, 0.28736248735545555, 0.34875588629216075,
0.40868648199071672, 0.46690290475095841, 0.523160974722233,
0.57722472608397268, 0.6288673967765136, 0.67787237963266389,
0.72403413092381463, 0.76715903251574036, 0.80706620402944262,
0.84358826162439349, 0.87657202027424785, 0.90587913671556963,
0.93138669070655433, 0.9529877031604308, 0.97059159254624727,
0.98412458372282685, 0.99353017226635076, 0.99877100725242607};
static const double gl48_weights[48] = {
0.0031533460523098418, 0.0073275539012758505, 0.011477234579234699,
0.015579315722943481, 0.019616160457356105, 0.023570760839324009,
0.027426509708357052, 0.031167227832798117, 0.034777222564770421,
0.038241351065830473, 0.041545082943464533, 0.044674560856694245,
0.04761665849249027, 0.050359035553854216, 0.052890189485193424,
0.05519950369998404, 0.057277292100402881, 0.059114839698395358,
0.060704439165893562, 0.062039423159892415, 0.063114192286253756,
0.06392423858464788, 0.06446616443594981, 0.064737696812683626,
0.064737696812683626, 0.06446616443594981, 0.06392423858464788,
0.063114192286253756, 0.062039423159892415, 0.060704439165893562,
0.059114839698395358, 0.057277292100402881, 0.05519950369998404,
0.052890189485193424, 0.050359035553854216, 0.04761665849249027,
0.044674560856694245, 0.041545082943464533, 0.038241351065830473,
0.034777222564770421, 0.031167227832798117, 0.027426509708357052,
0.023570760839324009, 0.019616160457356105, 0.015579315722943481,
0.011477234579234699, 0.0073275539012758505, 0.0031533460523098418};
#endif