BlackHolePerturbationToolkit / Teukolsky

A Mathematica package for computing solutions to the Teukolsky equation.
http://bhptoolkit.org/Teukolsky/
MIT License
19 stars 3 forks source link

Issues with static modes and their normalizations; proposed fix included #10

Closed znasipak closed 4 years ago

znasipak commented 4 years ago

For the scalar case (s = 0) the static "Up" solutions evaluate to 0 if m = 0. Additionally for arbitrary spin-weight the static "Up" solutions for m != 0 but a = 0 return "Indeterminate." Lastly, the linear combination of hypergeometric functions for the static "Up" solutions when m != 0 and a !=0 experience large cancellations. I have included a snippet of code below that should solve all of these issues. (Hopefully it copied over correctly.) Additionally, these expressions should apply for the static case when am = 0 or am != 0. There should be no need for a switch like the current if statement in the code. I chose the normalizations so that the "In" solution go like (r - r_+)^(- s - i \tau / 2) / \Gamma[1 - s - i\tau] at the horizon and the "Up" solutions should go like r^(- l - 1 - s). Obviously this is somewhat arbitrary and this slightly differs from the current normalization used in the toolkit. However I found the Gamma factor is necessary so that the "In" solution remains well-defined when \tau = 0 (i.e., a*m = 0).

With[{[Tau] = -((m a)/Sqrt[1-a^2]), [Kappa] = Sqrt[1 - a^2]}, solFuncs = <|"In" :> Function[{r},(2[Kappa])^(-s - I[Tau]/2) (-(1 + [Kappa] - r)/(2 [Kappa]))^(-s - I[Tau]/2) (1 - (1 + [Kappa] - r)/(2 [Kappa]))^(-I[Tau]/2) Hypergeometric2F1Regularized[-l - I[Tau], l + 1 - I[Tau], 1 - s - I[Tau], (1 + [Kappa] - r)/(2 [Kappa])]], "Up" :> Function[{r}, (2[Kappa])^(-s - l - 1) (-(1 + [Kappa] - r)/(2 [Kappa]))^(-s - (I [Tau])/2) (1 - (1 + [Kappa] - r)/(2 [Kappa]))^((I [Tau])/2 - l - 1) Hypergeometric2F1[l + 1 - I*[Tau], l + 1 - s, 2 l + 2, 1/(1 - (1 + [Kappa] - r)/(2 [Kappa]))]] |>; ];

barrywardell commented 4 years ago

Thanks for this. One nice thing with the existing implementation is that it is consistent with the small-omega limit of the non-static solutions. Do you know if that's the case with this new version also? If so, then it would definitely be better to replace the existing version with this.

znasipak commented 4 years ago

Unless I do not have the latest version of the Toolkit, the radial Teukolsky solutions given by TeukolskyRadial do not appear to be consistent with the small-omega limit of the non-static solutions. I know how to change the normalization of my expression for the inner solution to get it to match with the non-static case. As for the outer solutions, I thought the outer solutions just had a different structure. After factoring the r^{-(2s+1)} dependence, the static solutions decay as r^{-l+s} while the non-static solutions oscillate. So I am not sure how to normalize them in a way that is consistent with the non-static case.

MvdMeent commented 4 years ago

@znasipak Can you refactor your solution such that kappa does not appear in the denominator, anywhere? This breaks the a->1 limit.

MvdMeent commented 4 years ago

Nevermind those will be broken in any case.

znasipak commented 4 years ago

@MvdMeent yes everything breaks with the extremal case. It might be worth someone eventually coding up the MST solutions for the extremal case, but that will probably need to be done separately from the general a/M<1 case. @barrywardell I have included new normalizations so that the "In" solutions should match the small-omega limit, while "Up" solutions should match up to the additional factor of r^{-l + s}. If you evaluate the static case near the horizon, the "In" solutions go like \Delta^{-s} e^{ima/(2Mr+)r*} and if you evaluate the static case near infinity, the "Up" solutions go like r^{-l - s -1}.

With[{[Tau] = -((m a)/Sqrt[1-a^2]), [Kappa] = Sqrt[1 - a^2]}, normIn = (2[Kappa])^(-2s) Exp[-I[Tau]/2[Kappa](1+2Log[[Kappa]]/(1+[Kappa]))] If[s >= 1&&[Tau]==0, 1, Gamma[1 - s - I[Tau]]]; normUp = (2[Kappa])^(-s - l- 1); solFuncs = <|"In" :> Function[{r}, normIn (-(1 + [Kappa] - r)/(2 [Kappa]))^(-s - I[Tau]/2) (1 - (1 + [Kappa] - r)/(2 [Kappa]))^(-I[Tau]/2) Hypergeometric2F1Regularized[-l - I[Tau], l + 1 - I[Tau], 1 - s - I[Tau], (1 + [Kappa] - r)/(2 [Kappa])]], "Up" :> Function[{r}, normUp (-(1 + [Kappa] - r)/(2 [Kappa]))^(-s - (I [Tau])/2) (1 - (1 + [Kappa] - r)/(2 [Kappa]))^((I [Tau])/2 - l - 1) Hypergeometric2F1[l + 1 - I*[Tau], l + 1 - s, 2 l + 2, 1/(1 - (1 + [Kappa] - r)/(2 [Kappa]))]] |>; ];

barrywardell commented 4 years ago

These new versions are much better than what we had before, thanks. I've checked that they satisfy the field equations for all possible cases (in/up, s=-2,-1,0,1,+2, m=0/m!=0, a=0/a!=0, various l values). The only potential improvement is if we had continuity in omega for the "Up" solutions by getting rid of the r^{-l+s} factor, but it's not clear how to achieve that so I have committed this version.