use struct for coordinates

This commit is contained in:
Dominik Demuth
2024-09-16 19:52:51 +02:00
parent edeff66275
commit 8ef0b81820
18 changed files with 150 additions and 23 deletions

View File

@ -3,11 +3,11 @@
//
#include "base.h"
Distribution::Distribution(const double tau, std::mt19937_64 &rng) : m_tau(tau), m_rng(rng) {}
Distribution::Distribution(const double tau, std::mt19937_64 &rng) : m_tau(tau), m_tau_jump(tau), m_rng(rng) {}
Distribution::Distribution(std::mt19937_64 &rng) : m_rng(rng) {}
double Distribution::tau_wait() const {
return std::exponential_distribution(1./m_tau)(m_rng);
return std::exponential_distribution(1./m_tau_jump)(m_rng);
}

View File

@ -17,11 +17,13 @@ public:
[[nodiscard]] double getTau() const { return m_tau; }
void setTau(const double tau) { m_tau = tau;}
virtual void initialize() = 0;
virtual void draw_tau() = 0;
[[nodiscard]] double tau_wait() const;
private:
protected:
double m_tau{1.};
double m_tau_jump{1.};
std::mt19937_64& m_rng;
};

View File

@ -6,5 +6,9 @@
DeltaDistribution::DeltaDistribution(const double tau, std::mt19937_64& rng) : Distribution(tau, rng) {}
DeltaDistribution::DeltaDistribution(std::mt19937_64& rng) : Distribution(rng) {}
void DeltaDistribution::initialize() {
m_tau_jump = m_tau;
}
void DeltaDistribution::draw_tau() {}

View File

@ -12,6 +12,7 @@ public:
DeltaDistribution(double, std::mt19937_64&);
explicit DeltaDistribution(std::mt19937_64 &rng);
void initialize() override;
void draw_tau() override;
};

18
times/lognormal.cpp Normal file
View File

@ -0,0 +1,18 @@
//
// Created by dominik on 8/24/24.
//
#include "lognormal.h"
#include <cmath>
LogNormalDistribution::LogNormalDistribution(const double tau, const double sigma, std::mt19937_64& rng) : Distribution(tau, rng), m_sigma(sigma), m_distribution(std::log(tau), sigma) {}
LogNormalDistribution::LogNormalDistribution(std::mt19937_64& rng) : Distribution(rng) {}
void LogNormalDistribution::initialize() {
m_distribution = std::lognormal_distribution(std::log(m_tau), m_sigma);
m_tau_jump = m_distribution(m_rng);
}
void LogNormalDistribution::draw_tau() {
m_tau_jump = m_distribution(m_rng);
}

21
times/lognormal.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef LOGNORMAL_H
#define LOGNORMAL_H
#include "base.h"
#include <random>
class LogNormalDistribution final : public Distribution {
public:
LogNormalDistribution(double, double, std::mt19937_64&);
explicit LogNormalDistribution(std::mt19937_64 &rng);
void initialize() override;
void draw_tau() override;
private:
double m_sigma{1};
std::lognormal_distribution<> m_distribution;
};
#endif //LOGNORMAL_H