1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
// BH_diagnostics.hh -- header file for BH diagnostics
// $Header$
//
// prerequisites:
// <stdio.h>
//
//******************************************************************************
//
// This struct holds info for computing black hole diagnostics.
//
struct BH_diagnostics_info
{
enum patch::integration_method integral_method;
};
//******************************************************************************
//
// A struct BH_diagnostics holds all of our black hole diagnostics
// for a single apparent horizon. These diagnostics are only meaningful
// if the apparent horizon has indeed been found.
//
struct BH_diagnostics
{
public:
fp centroid_x, centroid_y, centroid_z;
fp min_radius, max_radius, mean_radius;
fp circumference_xy, circumference_xz, circumference_yz;
fp area;
fp m_irreducible;
public:
// compute diagnostics (assuming that apparent horizon has been found)
void compute(const patch_system& ps,
const struct BH_diagnostics_info& BH_diagnostics_info);
// print (CCTK_VInfo()) a line or two summarizing diagnostics
void print(int N_horizons, int hn)
const;
// create/open output file and write header describing output() fields
// ... stream is flushed after output to help with
// looking at diagnostics while Cactus is still running
FILE* setup_output_file(const struct IO_info& IO_info,
int N_horizons, int hn)
const;
// output a (long) line of all the diagnostics, to a stdio stream
// ... stream is flushed after output to help with
// looking at diagnostics while Cactus is still running
void output(FILE* fileptr, const struct IO_info& IO_info)
const;
// constructor initializes all diagnostics to 0.0
BH_diagnostics();
// no destructor needed, compiler-generated no-op is fine
private:
// helper function: compute surface integral of specified gridfn
static
fp surface_integral(const patch_system& ps,
int src_gfn, bool src_gfn_is_even_across_xy_plane,
bool src_gfn_is_even_across_xz_plane,
bool src_gfn_is_even_across_yz_plane,
enum patch::integration_method method);
private:
// we forbid copying and passing by value
// by declaring the copy constructor and assignment operator
// private, but never defining them
BH_diagnostics(const BH_diagnostics& rhs);
BH_diagnostics& operator=(const BH_diagnostics& rhs);
};
|