GremlinEq
Globals.h
1 //---------------------------------------------------------------------------
2 //
3 // $Id: Globals.h,v 1.6 2018/08/02 23:05:02 sahughes Exp $
4 //
5 //---------------------------------------------------------------------------
6 #ifndef _Globals_H
7 #define _Globals_H
8 
9 #include <cstdlib>
10 #include <cmath>
11 #include <iostream>
12 #include <complex>
13 
14 using std::cout;
15 using std::cerr;
16 using std::endl;
17 using std::ios;
18 
19 // For convenience, can change the floating-point type with a
20 // single preprocessor symbol
21 #define USE_FLOAT 0
22 #define USE_DOUBLE 1
23 #define USE_LONG_DOUBLE 2
24 
25 #if !defined(REAL_TYPE) || REAL_TYPE == USE_DOUBLE
26 typedef double Real;
27 #elif REAL_TYPE == USE_FLOAT
28 typedef float Real;
29 #elif REAL_TYPE == USE_LONG_DOUBLE
30 typedef long double Real;
31 #else
32 Illegal value!
33 #endif
34 
35 typedef std::complex<Real> Complex;
36 const Complex II = Complex(0.,1.);
37 
38 // Reasonable maximum
39 template<class NUMBER>
40 inline NUMBER Max(const NUMBER a, const NUMBER b) {
41  return (a > b ? a : b);
42 };
43 
44 // Reasonable minimum
45 template<class NUMBER>
46 inline NUMBER Min(const NUMBER a, const NUMBER b) {
47  return (a < b ? a : b);
48 };
49 
51 
52 class Kerr {
53  public:
55  static Real rplus(const Real a)
56  {
57  return(1. + sqrt((1. - a)*(1. + a)));
58  };
59 
61  static Real rminus(const Real a)
62  {
63  return(1. - sqrt((1. - a)*(1. + a)));
64  };
65 
67  static Real rstar(const Real r, const Real a)
68  {
69  const Real rm = rminus(a);
70  const Real rp = rplus(a);
71 
72  return(r + ((2.*rp)/(rp - rm))*log((r - rp)/2.) -
73  ((2.*rm)/(rp - rm))*log((r - rm)/2.));
74  };
75 
77  static Real Delta(const Real r, const Real a)
78  {
79  return(r*r - 2.*r + a*a);
80  }
81 
83  static Real dr_Delta(const Real r)
84  {
85  return(2.*(r - 1.));
86  }
87 
89  static Real ddr_Delta()
90  {
91  return(2.);
92  }
93 
95  static Real Sigma(const Real r, const Real a, const Real z)
96  {
97  return(r*r + a*a*z);
98  };
99 
101  static Real dr_Sigma(const Real r)
102  {
103  return(2.*r);
104  };
105 
107  static Real ddr_Sigma()
108  {
109  return(2.);
110  };
111 
112  static Real Eeqpro(const Real r, const Real a)
113  {
114  const Real v = 1./sqrt(r);
115 
116  const Real numer = 1. - v*v*(2. - a*v);
117  const Real denom = 1. - v*v*(3. - 2.*a*v);
118 
119  return(numer/sqrt(denom));
120  };
121 
122  static Real Eeqret(const Real r, const Real a)
123  {
124  const Real v = 1./sqrt(r);
125 
126  const Real numer = 1. - v*v*(2. + a*v);
127  const Real denom = 1. - v*v*(3. + 2.*a*v);
128 
129  return(numer/sqrt(denom));
130  };
131 
132  static Real Lzeqpro(const Real r, const Real a)
133  {
134  const Real v = 1./sqrt(r);
135 
136  const Real numer = 1. - a*v*v*v*(2. - a*v);
137  const Real denom = 1. - v*v*(3. - 2.*a*v);
138 
139  return(r*v*numer/sqrt(denom));
140  };
141 
142  static Real Lzeqret(const Real r, const Real a)
143  {
144  const Real v = 1./sqrt(r);
145 
146  const Real numer = 1. + a*v*v*v*(2. + a*v);
147  const Real denom = 1. - v*v*(3. + 2.*a*v);
148 
149  return(-r*v*numer/sqrt(denom));
150  };
151 
152  static Real Omega_phi_eqpro(const Real r, const Real a)
153  {
154  return(1./(sqrt(r*r*r) + a));
155  };
156 
157  static Real Omega_phi_eqret(const Real r, const Real a)
158  {
159  return(-1./(sqrt(r*r*r) - a));
160  };
161 
162  static Real isco_pro(const Real a)
163  {
164  const Real Z1 = 1. + (pow(1. + a, 1./3.) + pow(1. - a, 1./3.))*
165  pow((1. + a)*(1. - a), 1./3.);
166  const Real Z2 = sqrt(3.*a*a + Z1*Z1);
167 
168  return(3. + Z2 - sqrt((3. - Z1)*(3. + Z1 + 2.*Z2)));
169  };
170 
171  static Real isco_ret(const Real a)
172  {
173  const Real Z1 = 1. + (pow(1. + a, 1./3.) + pow(1. - a, 1./3.))*
174  pow((1. + a)*(1. - a), 1./3.);
175  const Real Z2 = sqrt(3.*a*a + Z1*Z1);
176 
177  return(3. + Z2 + sqrt((3. - Z1)*(3. + Z1 + 2.*Z2)));
178  };
179 };
180 
182 
183 struct DataHolder {
184  int l, m, k;
185  Real r, a, Lz, E, Q;
186  Real w, p, lambda;
187  Complex ZI, ZH;
188  Real EdotInf, LzdotInf, QdotInf, rdotInf;
189  Real EdotH, LzdotH, QdotH, rdotH;
190 };
191 //
192 // Index range
193 //
194 #define L_MAX 100
195 #define K_MAX 100
196 
197 #endif
static Real Sigma(const Real r, const Real a, const Real z)
Definition: Globals.h:95
static Real Delta(const Real r, const Real a)
Definition: Globals.h:77
static Real rstar(const Real r, const Real a)
Definition: Globals.h:67
static Real ddr_Delta()
Definition: Globals.h:89
Data Holder Struct (deprecated March 2019)
Definition: Globals.h:183
static Real dr_Sigma(const Real r)
Definition: Globals.h:101
static Real ddr_Sigma()
Definition: Globals.h:107
static Real rplus(const Real a)
Definition: Globals.h:55
Kerr Quantities Class.
Definition: Globals.h:52
static Real dr_Delta(const Real r)
Definition: Globals.h:83
static Real rminus(const Real a)
Definition: Globals.h:61