Files
GR-raytracing/src/spacetime.h
T
2026-08-25 22:45:43 -04:00

49 lines
1.6 KiB
C

#ifndef SPACETIME_H
#define SPACETIME_H
typedef struct {
double alpha;
double beta[3];
double gamma[3][3];
double K[3][3];
double d_alpha[3];
double d_beta[3][3]; /* d_beta[spatial derivative][component] */
double d_gamma[3][3][3]; /* d_gamma[spatial derivative][j][k] */
} MetricData;
typedef enum {
SPACETIME_RAY_ACTIVE,
SPACETIME_RAY_ESCAPED,
SPACETIME_RAY_CAPTURED
} SpacetimeRayStatus;
typedef struct SpacetimeSource SpacetimeSource;
typedef struct {
int (*eval)(const SpacetimeSource *source, double t, const double x[3],
MetricData *metric);
SpacetimeRayStatus (*classify)(const SpacetimeSource *source, double t,
const double x[3]);
void (*destroy)(SpacetimeSource *source);
} SpacetimeOps;
struct SpacetimeSource {
const SpacetimeOps *ops;
void *context;
};
/* The selected build provides spacetime_create_default(). Named constructors
* remain available to backend-specific tests and tools. */
int spacetime_create_default(SpacetimeSource *source);
int spacetime_create_minkowski(SpacetimeSource *source, double escape_radius);
int spacetime_create_schwarzschild_ks(SpacetimeSource *source, double mass,
double escape_radius,
double capture_radius);
void spacetime_destroy(SpacetimeSource *source);
int spacetime_eval(const SpacetimeSource *source, double t, const double x[3],
MetricData *metric);
SpacetimeRayStatus spacetime_classify(const SpacetimeSource *source, double t,
const double x[3]);
#endif