cpp/motions/base.cpp

42 lines
1.1 KiB
C++
Raw Normal View History

2024-08-16 17:55:27 +00:00
//
// Created by dominik on 8/12/24.
//
2024-08-18 11:21:27 +00:00
// #include <cmath>
2024-08-16 17:55:27 +00:00
#include <random>
2024-08-18 11:21:27 +00:00
#include <cmath>
2024-08-16 17:55:27 +00:00
#include "base.h"
2024-08-23 16:33:38 +00:00
#include "coordinates.h"
2024-08-16 17:55:27 +00:00
2024-09-16 17:52:51 +00:00
#include <unordered_map>
2024-08-18 11:21:27 +00:00
2024-08-16 17:55:27 +00:00
Motion::Motion(const double delta, const double eta, std::mt19937_64& rng) : m_delta(delta), m_eta(eta), m_rng(rng) {
m_uni_dist = std::uniform_real_distribution(0., 1.);
}
Motion::Motion(std::mt19937_64& rng) : m_rng(rng) {
m_uni_dist = std::uniform_real_distribution(0., 1.);
}
double Motion::omega_q(const double cos_theta, const double phi) const {
const double cos_theta_square = cos_theta * cos_theta;
const double sin_theta_square = 1. - cos_theta_square;
2024-08-20 15:51:49 +00:00
return M_PI * m_delta * (3. * cos_theta_square - 1. - m_eta * sin_theta_square * std::cos(2.*phi));
2024-08-16 17:55:27 +00:00
}
2024-08-23 16:33:38 +00:00
double Motion::omega_q(const SphericalPos& pos) const {
// std::cout << pos.cos_theta << " " << pos.phi << std::endl;
auto [cos_theta, phi] = pos;
2024-08-16 17:55:27 +00:00
2024-08-23 16:33:38 +00:00
return omega_q(cos_theta, phi);
2024-08-16 17:55:27 +00:00
}
2024-08-23 16:33:38 +00:00
SphericalPos Motion::draw_position() {
const double cos_theta = 1 - 2 * m_uni_dist(m_rng);
const double phi = 2.0 * M_PI * m_uni_dist(m_rng);
return {cos_theta, phi};
2024-09-16 17:52:51 +00:00
}