#include "sixsitejump.h" #include "coordinates.h" #include "../utils/registry.h" static AutoRegister reg("SixSiteOctahedralC3"); namespace motions { SixSiteOctahedronC3::SixSiteOctahedronC3(const double delta, const double eta, const double chi) : BaseMotion(std::string{"SixSiteOctahedral"}, delta, eta), m_chi{chi*M_PI/180.} {} SixSiteOctahedronC3::SixSiteOctahedronC3() : BaseMotion(std::string{"SixSiteOctahedralC3"}) {} void SixSiteOctahedronC3::initialize(std::mt19937_64& rng) { const coordinates::SphericalPos c3_axis = draw_position(rng); const double alpha = 2. * M_PI * m_uni_dist(rng); const double m_chi_opposite = M_PI - m_chi; for (int i = 0; i<3; i++) { m_corners[2*i] = omega_q(rotate(c3_axis, m_chi, alpha + i * 2./3.*M_PI)); m_corners[2*i+1] = omega_q(rotate(c3_axis, m_chi_opposite, alpha + i * 2./3.*M_PI + M_PI/3.)); } m_initial_omega = SixSiteOctahedronC3::jump(rng); } double SixSiteOctahedronC3::jump(std::mt19937_64& rng) { m_corner_idx += m_chooser(rng); m_corner_idx %= 6; return m_corners[m_corner_idx]; } std::unique_ptr SixSiteOctahedronC3::clone() const { return std::make_unique(*this); } std::string SixSiteOctahedronC3::toString() const { return {"SixSiteOctahedral/angle=" + std::to_string(m_chi / M_PI * 180.)}; } }