24 if (sigma < 10 * std::numeric_limits<double>::epsilon())
27 const double sigeff = std::pow(
M_PI_2, 1.5) * sigma;
28 const auto b = coeff.
m_b;
30 if (std::abs(b.mag() - 1.) < std::numeric_limits<double>::epsilon() * 10.) {
31 const double factor1 = 2. * (1. + b.z());
32 SpinMatrix Q((1. + b.z()), (I * b.y() - b.x()), (b.x() + I * b.y()), (b.z() + 1.));
44 return Q * lambda * Q.adjoint() / factor1;
47 if (b.mag() < 10 * std::numeric_limits<double>::epsilon()) {
57 throw std::runtime_error(
"Broken magnetic field vector");
63 std::pair<SpinMatrix, SpinMatrix>
71 R = computeRoughnessMatrix(coeff_i1, sigma,
false)
72 * computeRoughnessMatrix(coeff_i, sigma,
true);
74 RInv = computeRoughnessMatrix(coeff_i, sigma,
false)
75 * computeRoughnessMatrix(coeff_i1, sigma,
true);
Defines M_PI and some more mathematical constants.
Defines class MatrixFlux.
Defines namespace TransitionMagneticTanh.
Specular reflection and transmission coefficients in a layer in case of magnetic interactions between...
SpinMatrix computeP() const
Spinor m_lambda
eigenvalues for wave propagation
SpinMatrix computeInverseP() const
R3 m_b
unit magnetic field vector
std::pair< SpinMatrix, SpinMatrix > backwardsSubmatrices(const MatrixFlux &coeff_i, const MatrixFlux &coeff_i1, double sigma)
complex_t tanhc(complex_t z)
Complex tanhc function: .