9subroutine rdirac(sol,n,l,k,nr,r,vr,eval,g0,f0)
35real(8),
intent(in) :: sol
36integer,
intent(in) :: n,l,k,nr
37real(8),
intent(in) :: r(nr),vr(nr)
38real(8),
intent(inout) :: eval
39real(8),
intent(out) :: g0(nr),f0(nr)
41integer,
parameter :: maxit=2000
45real(8),
parameter :: eps=1.d-12
48real(8) g1(nr),f1(nr),fr(nr)
50real(8),
external :: splint
53 write(*,
'("Error(rdirac): k < 1 : ",I8)') k
59 write(*,
'("Error(rdirac): incompatible n and k : ",2I8)') n,k
63if ((k == n).and.(l /= k-1))
then
65 write(*,
'("Error(rdirac): incompatible n, k and l : ",3I8)') n,k,l
71else if (k == l+1)
then
75 write(*,
'("Error(rdirac): incompatible l and k : ",2I8)') l,k
81 write(*,
'("Error(rdirac): nr < 4 : ",I8)') nr
89 call rdiracint(sol,kpa,eval,nr,r,vr,nn,g0,g1,f0,f1)
98 if ((nnd /= 0).or.(nndp /= 0))
then
99 if (nnd*nndp < 1)
then
107 if (de < eps*(abs(eval)+1.d0))
goto 10
110write(*,
'("Warning(rdirac): maximum iterations exceeded")')
115 if ((g0(ir-1)*g0(ir) < 0.d0).or.(g1(ir-1)*g1(ir) < 0.d0))
then
122 if ((f0(ir-1)*f0(ir) < 0.d0).or.(f1(ir-1)*f1(ir) < 0.d0))
then
129 fr(ir)=g0(ir)**2+f0(ir)**2
135 write(*,
'("Error(rdirac): zero wavefunction")')
subroutine rdirac(sol, n, l, k, nr, r, vr, eval, g0, f0)
pure subroutine rdiracint(sol, kpa, e, nr, r, vr, nn, g0, g1, f0, f1)