35 using amrex::operator
""_rt;
37 void SecantRootFinder(
int n,
int nitmx, amrex::Real tol, amrex::Real *zeroj,
int *ier);
54 void GetBesselRoots(
int n,
int nk, amrex::Vector<amrex::Real>& roots, amrex::Vector<int> &ier) {
58 const amrex::Real tol = 1e-14_rt;
59 const amrex::Real nitmx = 10;
61 const amrex::Real c1 = 1.8557571_rt;
62 const amrex::Real c2 = 1.033150_rt;
63 const amrex::Real c3 = 0.00397_rt;
64 const amrex::Real c4 = 0.0908_rt;
65 const amrex::Real c5 = 0.043_rt;
67 const amrex::Real t0 = 4.0_rt*n*
n;
68 const amrex::Real t1 = t0 - 1.0_rt;
69 const amrex::Real t3 = 4.0_rt*t1*(7.0_rt*t0 - 31.0_rt);
70 const amrex::Real t5 = 32.0_rt*t1*((83.0_rt*t0 - 982.0_rt)*t0 + 3779.0_rt);
71 const amrex::Real t7 = 64.0_rt*t1*(((6949.0_rt*t0 - 153855.0_rt)*t0 + 1585743.0_rt)*t0 - 6277237.0_rt);
78 zeroj = c1 + c2 - c3 - c4 + c5;
88 const amrex::Real f1 = std::pow(n, (1.0_rt/3.0_rt));
89 const amrex::Real f2 = f1*f1*
n;
90 const amrex::Real f3 = f1*n*
n;
91 zeroj = n + c1*f1 + (c2/f1) - (c3/n) - (c4/f2) + (c5/f3);
105 const amrex::Real b0 = (k + 0.5_rt*n - 0.25_rt)*MathConst::pi;
106 const amrex::Real b1 = 8.0_rt*b0;
107 const amrex::Real b2 = b1*b1;
108 const amrex::Real b3 = 3.0_rt*b1*b2;
109 const amrex::Real b5 = 5.0_rt*b3*b2;
110 const amrex::Real b7 = 7.0_rt*b5*b2;
112 zeroj = b0 - (t1/b1) - (t3/b3) - (t5/b5) - (t7/b7);
114 const amrex::Real errj = std::abs(jn(n, zeroj));
129 amrex::Real p0, p1, q0, q1, dp, p;
136 for (
int ntry=0 ; ntry <= 1 ; ntry++) {
137 p0 = c[ntry]*(*zeroj);
142 for (
int it=1;
it <= nitmx;
it++) {
144 p = p1 - q1*(p1 - p0)/(q1 - q0);
146 if (
it > 1 && std::abs(dp) < tol) {
void GetBesselRoots(int n, int nk, amrex::Vector< amrex::Real > &roots, amrex::Vector< int > &ier)
Definition: BesselRoots.H:54
int n
Definition: run_libensemble_on_warpx.py:68
void SecantRootFinder(int n, int nitmx, amrex::Real tol, amrex::Real *zeroj, int *ier)
Definition: BesselRoots.H:127
int it
Definition: read_lab_particles.py:11