Skip to content
Snippets Groups Projects
Commit b43ebc88 authored by Beerwerth, Randolf's avatar Beerwerth, Randolf
Browse files

Fix k_z vector sign bug in polarized Fresnel engine

parent 2965ee4f
No related branches found
No related tags found
No related merge requests found
...@@ -110,7 +110,7 @@ Eigen::Matrix2cd MatrixRTCoefficients::pMatrixHelper(double sign) const { ...@@ -110,7 +110,7 @@ Eigen::Matrix2cd MatrixRTCoefficients::pMatrixHelper(double sign) const {
result << alpha + sign * beta * b.z(), sign * beta * (b.x() - I * b.y()), result << alpha + sign * beta * b.z(), sign * beta * (b.x() - I * b.y()),
sign * beta * (b.x() + I * b.y()), alpha - sign * beta * b.z(); sign * beta * (b.x() + I * b.y()), alpha - sign * beta * b.z();
return result; return m_kz_sign * result;
} }
Eigen::Matrix2cd MatrixRTCoefficients::computeP() const { Eigen::Matrix2cd MatrixRTCoefficients::computeP() const {
...@@ -138,7 +138,8 @@ Eigen::Matrix2cd MatrixRTCoefficients::computeDeltaMatrix(double thickness) { ...@@ -138,7 +138,8 @@ Eigen::Matrix2cd MatrixRTCoefficients::computeDeltaMatrix(double thickness) {
const complex_t alpha = 0.5 * thickness * (m_lambda(1) + m_lambda(0)); const complex_t alpha = 0.5 * thickness * (m_lambda(1) + m_lambda(0));
const Eigen::Matrix2cd exp2 = Eigen::DiagonalMatrix<complex_t, 2>( const Eigen::Matrix2cd exp2 = Eigen::DiagonalMatrix<complex_t, 2>(
{GetImExponential(thickness * m_lambda(1)), GetImExponential(thickness * m_lambda(0))}); {GetImExponential(m_kz_sign * thickness * m_lambda(1)),
GetImExponential(m_kz_sign * thickness * m_lambda(0))});
// Compute resulting phase matrix according to exp(i p_m d_m) = exp1 * Q * exp2 * Q.adjoint(); // Compute resulting phase matrix according to exp(i p_m d_m) = exp1 * Q * exp2 * Q.adjoint();
if (std::abs(m_b.mag() - 1.) < eps) { if (std::abs(m_b.mag() - 1.) < eps) {
...@@ -149,7 +150,7 @@ Eigen::Matrix2cd MatrixRTCoefficients::computeDeltaMatrix(double thickness) { ...@@ -149,7 +150,7 @@ Eigen::Matrix2cd MatrixRTCoefficients::computeDeltaMatrix(double thickness) {
return Q * exp2 * Q.adjoint() / factor1; return Q * exp2 * Q.adjoint() / factor1;
} else if (m_b.mag() < eps) } else if (m_b.mag() < eps)
return Eigen::Matrix2cd::Identity() * GetImExponential(alpha); return Eigen::Matrix2cd::Identity() * GetImExponential(m_kz_sign * alpha);
throw std::runtime_error("Broken magnetic field vector"); throw std::runtime_error("Broken magnetic field vector");
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment