49 lines
1.6 KiB
C
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
|