00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00016 #ifndef __Kerr_HPP
00017 #define __Kerr_HPP "Created 27.02.2001 21:42:27 by werner"
00018
00019 #include <vecal/Christoffel.hpp>
00020 #include <vecal/Geodesic.hpp>
00021
00022 namespace VecAl
00023 {
00024
00025 struct Kerr
00026 {
00027 Scalar_t m, a, e;
00028
00029 enum { t, r, h, p,
00030 theta=h, phi = p
00031 };
00032
00033 Kerr(const Scalar_t&mass)
00034 : m(mass)
00035 {}
00036
00037 void getMetric(Metric<Scalar_t,4>&g, const Point_t&P) const
00038 {
00039 Scalar_t sinTheta = sin(P[h]);
00040
00041 g.set(0);
00042
00043 S r2 = point[P4_R]*point[P4_R];
00044 S tmp = cos(point[P4_H]);
00045
00046 S sig = r2 + a2*tmp*tmp;
00047 S del = r2 + a2 + e2 - 2*m*point[P4_R];
00048
00049 tmp = sin(point[P4_H]);
00050 S tmp2 = tmp*tmp;
00051
00052 g[M4_TT] = (a2*tmp2 - del)/sig;
00053 g[M4_TP] = g[M4_PT] = -a*tmp2*(r2 + a2 - del)/sig;
00054 g[M4_RR] = sig/del;
00055 g[M4_HH] = sig;
00056 g[M4_PP] = ((r2 + a2)*(r2 + a2) - del*a2*tmp2)/sig*tmp2;
00057 }
00058
00059 void getChristoffel(Christoffel<Scalar_t,4>&G, const Point_t&P) const
00060 {
00061 Scalar_t sinTheta = sin(P[h]);
00062
00063 G.set(0);
00064
00065
00066
00067 S r2 = point[P4_R]*point[P4_R];
00068 S tmpx = cos(point[P4_H]);
00069
00070 S sig = r2 + a2*tmpx*tmpx;
00071 S del = r2 + a2 + e2 - 2*m*point[P4_R];
00072
00073 S tmp = sin(point[P4_H]);
00074 S tmp2 = tmp*tmp;
00075
00076 S t_b = point[P4_R]*point[P4_R] + a2;
00077 S t_c = t_b*t_b - del*a2*tmp2;
00078 S t_d = del - a2*tmp2;
00079 S t_e = t_b - del;
00080 S t_f = point[P4_R] - m;
00081
00082 S t_n = t_d*t_c + a2*tmp2*t_e*t_e;
00083
00084
00085
00086 chr[C4_TTR] =
00087 chr[C4_TRT] = (t_c*(t_f - point[P4_R]*t_d/sig)
00088 + a2*tmp2*t_e*(m - point[P4_R]*t_e/sig))/t_n;
00089 chr[C4_TTH] =
00090 chr[C4_THT] = a2*tmp*tmpx/t_n*(-t_c + t_d*t_c/sig
00091 + t_e*t_e*(1 + a2*tmp2/sig));
00092 chr[C4_TRP] =
00093 chr[C4_TPR] = a*tmp2/t_n*(m*t_c - t_e*(2*point[P4_R]*t_b
00094 - a2*tmp2*t_f));
00095 chr[C4_TPH] =
00096 chr[C4_THP] = a2*a*del*tmp2*tmp*tmpx*t_e/t_n;
00097
00098 chr[C4_RTT] = (sig*t_f - point[P4_R]*t_d)/sig/sig/sig*del;
00099 chr[C4_RTP] =
00100 chr[C4_RPT] = ((sig*m - point[P4_R]*t_e)/sig/sig/sig
00101 *del*a*tmp2);
00102 chr[C4_RRR] = (del*point[P4_R] - sig*t_f)/del/sig;
00103 chr[C4_RRH] =
00104 chr[C4_RHR] = -a2*tmp*tmpx/sig;
00105 chr[C4_RPP] = (-t_b*2*point[P4_R] + t_f*a2*tmp2
00106 + t_c*point[P4_R]/sig)*del*tmp2/sig/sig;
00107 chr[C4_RHH] = -del*point[P4_R]/sig;
00108
00109
00110 chr[C4_PTR] =
00111 chr[C4_PRT] = -a/t_n*(m*t_d - t_f*t_e);
00112 chr[C4_PTH] =
00113 chr[C4_PHT] = -a*tmpx*t_e/t_n*(t_d/tmp + a2*tmp);
00114 chr[C4_PRP] =
00115 chr[C4_PPR] = (t_d*(2*point[P4_R]*t_b - a2*tmp2*t_f
00116 - point[P4_R]*t_c/sig)
00117 +a2*tmp2*t_e*(m - point[P4_R]*t_e/sig))/t_n;
00118 chr[C4_PPH] =
00119 chr[C4_PHP] = (t_d*tmpx*(t_c*(1/tmp + a2*tmp/sig)
00120 - a2*del*tmp)
00121 + a2*tmp*tmpx*t_e*t_e*(1 + a2*tmp2/sig))/t_n;
00122
00123 chr[C4_HTT] = -(sig - del + a2*tmp2)/sig/sig/sig*a2*tmp*tmpx;
00124 chr[C4_HTP] =
00125 chr[C4_HPT] = tmp*tmpx*t_e/sig/sig*(1 + a2*a*tmp2/sig);
00126 chr[C4_HRR] = a2*tmp*tmpx/del/sig;
00127 chr[C4_HRH] =
00128 chr[C4_HHR] = point[P4_r]/sig;
00129 chr[C4_HPP] = -tmp*tmpx/sig/sig*(t_b*t_b - 2*del*a2*tmp2
00130 + t_c*a2*tmp2/sig);
00131 chr[C4_HHH] = -a2*tmp*tmpx/sig;
00132
00133 }
00134 };
00135
00136 }
00137
00138 #endif