00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00017 #ifndef __Schwarzschild_HPP
00018 #define __Schwarzschild_HPP "Created 27.02.2001 21:42:27 by werner"
00019
00020 #include <vecal/Christoffel.hpp>
00021 #include <vecal/Geodesic.hpp>
00022
00023 namespace VecAl
00024 {
00025
00030 struct SphericalSymmetric
00031 {
00032 enum { t, r, h, p,
00033 theta=h, phi = p
00034 };
00035
00036 Scalar_t A(Scalar_t r, Scalar_t t);
00037 Scalar_t B(Scalar_t r, Scalar_t t);
00038
00039
00048 void metric(Metric<Scalar_t,4>&g, const Point_t&P) const
00049 {
00050 Scalar_t sinTheta = sin(P[h]);
00051
00052 g.set(0);
00053 g(t,t) = A(P[r], P[t]);
00054 g(r,r) = -B(P[r], P[t]);
00055 g(h,h) = -P[r]*P[r];
00056 g(p,p) = -P[r]*P[r]*sinTheta*sinTheta;
00057 }
00058
00067 void cometric(Metric<Scalar_t,4>&g, const Point_t&P) const
00068 {
00069 Scalar_t sinTheta = sin(P[h]);
00070
00071 g.set(0);
00072 g(t,t) = 1/A(P[r], P[t]);
00073 g(r,r) = -1/B(P[r], P[t]);
00074 g(h,h) = -1/(P[r]*P[r]);
00075 g(p,p) = -1/(P[r]*P[r]*sinTheta*sinTheta);
00076 }
00077
00078
00102 void getChristoffel(Christoffel<Scalar_t,4>&G, const Point_t&P) const
00103 {
00104 Scalar_t sinTheta = sin(P[h]);
00105
00106 G.set(0);
00107 G(t,t,t) = dotA(P[r], P[t]) / (2*A(P[r], P[t]) );
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 }
00121
00122
00141 void Ricci(Metric<Scalar_t,4>&g, const Point_t&P) const
00142 {}
00143 };
00144
00145 }
00146
00147 #endif