53subroutine solve_secular_equation_&
55&(obj, n, i, d, z, delta, rho, dlam)
108#include "../../src/general/precision_kinds.F90"
110 integer(kind=ik) :: n, i
111 real(kind=rk) :: d(n), z(n), delta(n), rho, dlam
113 integer(kind=ik) :: iter
114 real(kind=rk) :: a, b, x, y, dshift
121 call obj%timer%start(
"solve_secular_equation" // precision_suffix)
129 delta(:) = d(:) - dshift
132 b = rho*sum(z(:)**2) + 1.0_rk
138 x = 0.5_rk*(d(i)+d(i+1))
139 y = 1.0_rk + rho*sum(z(:)**2/(d(:)-x))
148 delta(:) = d(:) - dshift
160 if (x==a .or. x==b)
exit
161#ifdef DOUBLE_PRECISION_REAL
162 if (abs(x) < 1.e-200_rk8)
exit
164 if (abs(x) < 1.e-20_rk4)
exit
168 y = 1. + rho*sum(z(:)**2/(delta(:)-x))
184 delta(:) = delta(:) - x
185 call obj%timer%stop(
"solve_secular_equation" // precision_suffix)