fortran go to 文
以下のgo to文で書かれたプログラムをdoループのプログラムに書き直したいのですがどのように直してよいかわかりません。どなたかわかる方がいらっしゃったら教えて下さい。よろしくお願いします。
subroutine fft_eth(n,cx,icon,irr)
implicit none
integer :: n, m, ii, l, lb, llb, k, kl, kb, klb, &
j, jl, jl2, jlb, jb, jb2, jb4, jj, j1, j2, jjb, jf1, jf2, jff, jf
real(8) :: fn, ff, fkl, fjl, fm, ffm, fklb, fjlb, th, th2, st, tt
real(8) :: icon
real(8) :: irr
complex(8) :: ct, cu, ca, cx, cuc
dimension cx(n)
real(8), parameter :: pi = 3.141592653589793238462643d0
if(n < 2) go to 900
fn = n
m = idnint(dlog(fn)/dlog(2.0d0))
ii = 2**m-n
if(ii /= 0) go to 910
do 50 l = 1, m
kl = 2**(l-1)
fkl =kl
fjl = 0.5d0*fn/fkl
jl = fjl
jl2 = 2*jl
th = 2.0d0*pi*fkl/fn
th2 = 0.5d0*th
st = dsin(th)
tt = -2.0d0*dsin(th2)*dsin(th2)
ct = dcmplx(tt,st)
do 40 k = 1, kl
jj = jl2*(k-1)
cu = (1.0d0,0.0d0)
do 30 j = 1, jl
j1 = j+jj
j2 = j1+jl
ca = cx(j1)-cx(j2)
if(icon < 0) go to 10
cuc = dconjg(cu)
cx(j2) = ca*cuc
go to 20
10 continue
cx(j2) = ca*cu
20 continue
cu = cu+cu*ct
30 continue
40 continue
50 continue
!=================
! BIT REVERSAL
!=================
fm = m
ffm = 0.5d0*fm
llb = ffm
do 80 lb = 1, llb
klb = 2**(lb-1)
fklb =klb
fjlb = 0.25d0*fn/fklb
jlb = fjlb
jb2 = 2*jlb
jb4 = 4*jlb
do 70 kb = 1, klb
jjb = jb4*(kb-1)
jf1 = jjb+klb
jf2 = jjb+jb2
do 60 jb = 1, jlb
ff = jb-1
ff = ff/fklb
jff = ff
jf = jb+jff*klb
j1 = jf+jf1
j2 = jf+jf2
ct = cx(j1)
cx(j1) = cx(j2)
cx(j2) = ct
60 continue
70 continue
80 continue
!=======================
! ERROR CONDITION CODE
!=======================
irr = 0
return
900 continue
irr = -1
return
910 continue
irr = -2
return
end subroutine
お礼
ご回答ありがとうございます! わかりやすく説明していただいて本当に助かりました! 参考にして頑張りたいと思います!