Skip to content
Snippets Groups Projects
Commit b41dfd5e authored by Van Herck, Walter's avatar Van Herck, Walter
Browse files

Fix pyramid form factor

parent 397d5571
No related branches found
No related tags found
No related merge requests found
...@@ -101,14 +101,18 @@ complex_t FormFactorPyramid::fullPyramidPrimitive(complex_t a, complex_t b, comp ...@@ -101,14 +101,18 @@ complex_t FormFactorPyramid::fullPyramidPrimitive(complex_t a, complex_t b, comp
{ {
const complex_t im(0, 1); const complex_t im(0, 1);
if (std::norm(a*z) > Numeric::double_epsilon && std::norm(b*z) > Numeric::double_epsilon) { if (std::norm(a*z) > Numeric::double_epsilon && std::norm(b*z) > Numeric::double_epsilon) {
complex_t phase = std::exp(im * c * z); if (std::abs((a-b)*(a-b)-c*c)*z*z > Numeric::double_epsilon &&
complex_t numerator = std::sin(a * z) * (b * (a * a - b * b + c * c) * std::cos(b * z) std::abs((a+b)*(a+b)-c*c)*z*z > Numeric::double_epsilon) {
+ im * c * (a * a + b * b - c * c) * std::sin(b * z)) complex_t phase = std::exp(im * c * z);
+ a * std::cos(a * z) * ((-a * a + b * b + c * c) * std::sin(b * z) complex_t numerator = std::sin(a * z) * (b * (a * a - b * b + c * c) * std::cos(b * z)
+ 2.0 * im * b * c * std::cos(b * z)); + im * c * (a * a + b * b - c * c) * std::sin(b * z))
complex_t denominator = a * b * (a - b - c) * (a + b - c) * (a - b + c) * (a + b + c); + a * std::cos(a * z) * ((-a * a + b * b + c * c) * std::sin(b * z)
// return -4.0 * phase * numerator / denominator; + 2.0 * im * b * c * std::cos(b * z));
return 2.0 * (g(a-b, c, z) - g(a+b, c, z)) / (a*b); complex_t denominator = a * b * (a - b - c) * (a + b - c) * (a - b + c) * (a + b + c);
return -4.0 * phase * numerator / denominator;
} else {
return 2.0 * (g(a-b, c, z) - g(a+b, c, z)) / (a*b);
}
} else if (std::norm(a*z) <= Numeric::double_epsilon } else if (std::norm(a*z) <= Numeric::double_epsilon
&& std::norm(b*z) <= Numeric::double_epsilon) { && std::norm(b*z) <= Numeric::double_epsilon) {
if (std::norm(c*z) <= Numeric::double_epsilon) { if (std::norm(c*z) <= Numeric::double_epsilon) {
......
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