Celeritas 0.7.0-dev.79+develop.b3dc2e108
|
Sample a facet normal from a Gaussian roughness model. More...
#include <GaussianRoughnessSampler.hh>
Public Member Functions | |
CELER_FUNCTION | GaussianRoughnessSampler (Real3 const &normal, real_type sigma_alpha) |
Construct from sigma_alpha and global normal. | |
template<class Engine > | |
CELER_FUNCTION Real3 | operator() (Engine &rng) |
Sample a facet normal via the Gaussian roughness model. | |
Sample a facet normal from a Gaussian roughness model.
The Gaussian roughness model was introduced in levin-morephysical-1996 . The "facet slope", an angle \( \alpha \) along a linear slice of a crystal surface, is approximated as a normal distribution standard deviation \( \sigma_\alpha \) . (The paper justifies this distribution based on surface roughness measurements with a bismuth germanate [BGO] crystal.) Assuming an azimuthally isotropic surface, the polar distribution must be expressed in terms of the tilt \( \theta \). The Jacobian factor for spherical coordinates contributes a \( \sin \theta \) term, leading to the spherical PDF
\[ p(\sigma_\alpha; \theta,\phi) = \frac{1}{2\pi}\,\frac{1}{\mathcal N}\, \exp\!\left(-\frac{\theta^{2}}{2\sigma_\alpha^{2}}\right)\sin\theta \,. \]
The polar angle \( \theta \) is sampled using rejection:
The extra limitation of the angle being less than 4 sigma reduces the rejection fraction by a factor of ~25 for smooth crystals (sigma = 0.01).