program Photon Trajectory around Kerr Black Hole
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c astrophysics laboratory c
c Wataru Yoshida c
c 2001/2/16 c
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
real h
real*8 r,v,t
real*8 x,y,Q,P,b,vx,vy,vv
real*8 E,L,M,a,dP,c,d,w
real*8 k,k1,k2,k3,k4
real*8 j,j1,j2,j3,j4
real*8 g,g1,g2,f3,g4
integer i
c(M,r,a)=(r**4+r**2*a**2+2.0*M*r*a**2)
d(M,r,a)=(r**2-2.0*M*r+a**2)
c r方向の常微分方程式
w(M,r,a,L,E)=(0.5)*
x ((((-2.0*r*a**2-6.0*M*a**2)/r**4)*E**2)+
x ((12.0*M*a*L*E)/r**4)+
x (((2.0*r-6.0*M)/r**4)*L**2))
c θ方向の常微分方程式
dP(M,r,a,L,E)=(2.0*M*r*a*E+(r**2-2.0*M*r)*L)/
x (r**2*(r**2-2.0*M*r+a**2))
open(10,file='t-r.txt',status='unknown')
open(20,file='t-P.txt',status='unknown')
open(30,file='x-y.txt',status='unknown')
open(40,file='jisyou.txt',status='unknown')
open(50,file='ergo.txt',status='unknown')
c 初期値の入力
write(*,*) 'input first value!'
write(*,*) 'M:mass of B.H.'
write(*,*) 'M='
read(*,*) M
write(*,*) 'x,y:first position'
write(*,*) 'x='
read(*,*) x
write(*,*) 'y='
read(*,*) y
write(*,*) 'a:rotary parameter (-1<a<1)'
write(*,*) 'a='
read(*,*) a
write(*,*) 'Q:discharge direction '
write(*,*) 'Q='
read(*,*) Q
h=0.001
t=0
vx=cos(3.1415*Q/180.0)
vy=sin(3.1415*Q/180.0)
a=a*M
b=y
r=x**2+y**2
P=asin(b/r)
v=vx*cos(P)+vy*sin(P)
vv=(-vx*sin(P)+vy*cos(P))/r
E=(r**2*d(M,r,a)*vv)/
x (b*(r**2-2.0*M*r)+2.0*M*r*a)
L=E*b
write(10,100) t,r
write(20,100) t,P
write(30,100) x,y
c ルンゲクッタ
do i=1,1000000
k1=h*v
j1=h*w(M,r,a,L,E)
g1=h*dP(M,r,a,L,E)
k2=h*(v+j1/2.0)
j2=h*w(M,r+k1/2.0,a,L,E)
g2=h*dP(M,r+k1/2.0,a,L,E)
k3=h*(v+j2/2.0)
j3=h*w(M,r+k2/2.0,a,L,E)
g3=h*dP(M,r+k2/2.0,a,L,E)
k4=h*(v+j3)
j4=h*w(M,r+k3,a,L,E)
g4=h*dP(M,r+k3,a,L,E)
k=(k1+2.0*k2+2.0*k3+k4)/6
j=(j1+2.0*j2+2.0*j3+j4)/6
g=(g1+2.0*g2+2.0*g3+g4)/6
t=t+h
r=r+k
v=v+j
P=P+g
x=r*cos(P)
y=r*sin(P)
write(10,100) t,r
write(20,100) t,P
write(30,100) x,y
if (r .lt. 2*M) then
go to 10
end if
if (r .lt. M+(M**2-a**2)**0.5) then
go to 50
end if
end do
c エルゴ球内のルンゲクッタ
10 h=0.0001
do i=1,20000
k1=h*v
j1=h*w(M,r,a,L,E)
g1=h*dP(M,r,a,L,E)
k2=h*(v+j1/2.0)
j2=h*w(M,r+k1/2.0,a,L,E)
g2=h*dP(M,r+k1/2.0,a,L,E)
k3=h*(v+j2/2.0)
j3=h*w(M,r+k2/2.0,a,L,E)
g3=h*dP(M,r+k2/2.0,a,L,E)
k4=h*(v+j3)
j4=h*w(M,r+k3,a,L,E)
g4=h*dP(M,r+k3,a,L,E)
k=(k1+2.0*k2+2.0*k3+k4)/6
j=(j1+2.0*j2+2.0*j3+j4)/6
g=(g1+2.0*g2+2.0*g3+g4)/6
t=t+h
r=r+k
v=v+j
P=P+g
x=r*cos(P)
y=r*sin(P)
write(10,100) t,r
write(20,100) t,P
write(30,100) x,y
if ((x**2+y**2)**0.5 .lt. M+(M**2-a**2)**0.5) then
go to 50
end if
end do
c 事象の地平面
50 r=M+(M**2-a**2)**0.5
x=r
y=0
write(40,100) x,y
h=5
do i=1,72
x=r*cos(3.14*h/180)
y=r*sin(3.14*h/180)
write(40,100) x,y
h=h+5
end do
c エルゴ球
r=2*M
x=r
y=0
write(50,100) x,y
h=5
do i=1,72
x=r*cos(3.14*h/180)
y=r*sin(3.14*h/180)
write(50,100) x,y
h=h+5
end do
100 format(f8.2,2x,f14.4)
close(10)
close(20)
close(30)
close(40)
close(50)
end
玄関へ