10#ifndef COVARIANCE_MATRIX_MATH_H
11#define COVARIANCE_MATRIX_MATH_H
54 std::tuple<amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal> roots;
60 amrex::ParticleReal R = (9.0_prt*a*b*c - 27_prt*powi<2>(a)*d - 2.0_prt*powi<3>(b))/(54.0_prt*powi<3>(a));
65 if (discriminant > tol) {
68 "Impactx::diagnostics::CubicRootsTrig",
69 "Polynomial appearing in CubicRootsTrig has one or more complex "
70 "(non-real) roots. Only the real part is returned. This "
71 "suggests a loss of numerical precision in computation of the "
72 "eigenemittances. Treat eigenemittance values with caution.",
73 ablastr::warn_manager::WarnPriority::medium
76 std::cout <<
"Polynomial in CubicRoots has one or more complex roots." <<
"\n";
78 }
else if (Q == 0.0_prt) {
88 x1 = 2.0_prt*std::sqrt(-Q)*std::cos(theta/3.0_prt) - b/(3.0_prt*a);
89 x2 = 2.0_prt*std::sqrt(-Q)*std::cos(theta/3.0_prt + 2.0_prt*pi/3.0_prt) - b/(3.0_prt*a);
90 x3 = 2.0_prt*std::sqrt(-Q)*std::cos(theta/3.0_prt + 4.0_prt*pi/3.0_prt) - b/(3.0_prt*a);
94 roots = std::make_tuple(x1,x2,x3);
126 std::tuple<amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal> roots;
132 amrex::ParticleReal R = (9_prt*a*b*c - 27_prt*powi<2>(a)*d - 2_prt*powi<3>(b))/(54_prt*powi<3>(a));
138 Complex Dc(discriminant,0_prt);
158 Complex z3 = Qc/(powi<2>(xi)*C) - powi<2>(xi)*C;
159 x1 = z2.
m_real - b/(3_prt*a);
160 x2 = z1.
m_real - b/(3_prt*a);
161 x3 = z3.
m_real - b/(3_prt*a);
164 roots = std::make_tuple(x1,x2,x3);
amrex::GpuComplex< amrex::Real > Complex
amrex_particle_real ParticleReal
void WMRecordWarning(const std::string &topic, const std::string &text, const WarnPriority &priority=WarnPriority::medium)
constexpr T powi(T x) noexcept
__host__ __device__ GpuComplex< T > pow(const GpuComplex< T > &a_z, const T &a_y) noexcept
__host__ __device__ GpuComplex< T > sqrt(const GpuComplex< T > &a_z) noexcept
Definition CovarianceMatrixMath.H:25
std::tuple< amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal > CubicRootsAlg(amrex::ParticleReal a, amrex::ParticleReal b, amrex::ParticleReal c, amrex::ParticleReal d)
Definition CovarianceMatrixMath.H:115
std::tuple< amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal > CubicRootsTrig(amrex::ParticleReal a, amrex::ParticleReal b, amrex::ParticleReal c, amrex::ParticleReal d)
Definition CovarianceMatrixMath.H:43