Add unit tests, refactor simulation code, improve Makefile, and add documentation
This commit is contained in:
+59
-56
@@ -1,8 +1,10 @@
|
||||
#pragma once
|
||||
#include <cmath>
|
||||
|
||||
// $\tau_{\alpha}$
|
||||
const double TAU_ALPHA = 0.5;
|
||||
//
|
||||
// $\frac{1}{\tau_{\alpha}}$; $\tau_{\alpha} = 0.5s$
|
||||
//
|
||||
const double tau_alpha_inv = 2.0;
|
||||
|
||||
// $V^0_{\alpha \beta}$
|
||||
const double V0_AB = 2.1;
|
||||
@@ -10,79 +12,80 @@ const double V0_AB = 2.1;
|
||||
// $\sigma$
|
||||
const double SIGMA = 0.3;
|
||||
|
||||
//
|
||||
// $\frac{-1}{2\sigma}$
|
||||
//
|
||||
const double NEG_TWO_SIGMA_INV = -1.0 / (2 * SIGMA);
|
||||
|
||||
//
|
||||
// $\frac{-V^0_{\alpha\beta}}{2\sigma}$
|
||||
//
|
||||
const double NEG_V0_AB_div_TWO_SIGMA = V0_AB * NEG_TWO_SIGMA_INV;
|
||||
|
||||
// $U^0_{\alpha B}$
|
||||
const double U0_AB = 10.0;
|
||||
|
||||
// $R$
|
||||
const double R = 0.2;
|
||||
|
||||
// $c$
|
||||
const double C = 0.5;
|
||||
|
||||
// $\varphi$
|
||||
const double PHI = 100.0 / 180.0 * M_PI;
|
||||
|
||||
// $<v^0>$
|
||||
const double V0_MEAN = 1.34;
|
||||
|
||||
// $\sqrt{\theta}$
|
||||
const double V0_STD_DEV = 0.26;
|
||||
|
||||
// $\varDelta_{t}$
|
||||
const double DELTA_T = 2;
|
||||
|
||||
// $dt$
|
||||
const double DT = 0.02;
|
||||
|
||||
// # ##############################################################################################
|
||||
|
||||
//
|
||||
// $\frac{-1}{2\sigma}$
|
||||
//
|
||||
const double NEG_ONE_DIV_TWO_SIGMA = -1.0 / (2 * SIGMA);
|
||||
|
||||
//
|
||||
// $\frac{-V^0_{\alpha\beta}}{2\sigma}$
|
||||
//
|
||||
const double NEG_V0_AB_DIV_TWO_SIGMA = -V0_AB / (2 * SIGMA);
|
||||
|
||||
// $cos(\varphi)$
|
||||
const double COS_PHI = cos(PHI);
|
||||
|
||||
//
|
||||
// $\frac{-1}{R}$
|
||||
//
|
||||
const double NEG_R_INV = -1 / R;
|
||||
//
|
||||
const double NEG_R_INV = -1.0 / R;
|
||||
|
||||
//
|
||||
// $\frac{-U^0_{\alpha B}}{R}$
|
||||
//
|
||||
const double NEG_U0_AB_DIV_R = -U0_AB / R;
|
||||
const double NEG_U0_AB_div_R = -U0_AB / R;
|
||||
|
||||
// $c * dt$
|
||||
const double C_TIMES_DT = C * DT;
|
||||
// $-c$
|
||||
const double c_neg = -0.5;
|
||||
|
||||
// ${(\varDelta_{t})}^2$
|
||||
const double DELTA_T_SQ = DELTA_T * DELTA_T;
|
||||
// $\varphi$
|
||||
const double phi = 100.0 / 180.0 * M_PI;
|
||||
|
||||
// $cos(\varphi)$
|
||||
const double cos_phi = cos(phi);
|
||||
|
||||
// $<v^0>$
|
||||
const double v0_mean = 1.34;
|
||||
|
||||
// $\sqrt{\theta}$
|
||||
const double v0_std_dev = 0.26;
|
||||
|
||||
// $\varDelta_{t}$
|
||||
const double delta_t = 2;
|
||||
|
||||
// $\varDelta_{t}^2$
|
||||
const double delta_t_sq = delta_t * delta_t;
|
||||
|
||||
// $dt$
|
||||
const double dt = 0.02;
|
||||
|
||||
// $-dt$
|
||||
const double dt_neg = -dt;
|
||||
|
||||
// $-c \cdot dt$
|
||||
const double c_neg_times_dt = c_neg * dt;
|
||||
|
||||
//
|
||||
// $\frac{1}{\tau_{\alpha}}$
|
||||
// $\frac{1}{\tau_{\alpha}} \cdot dt$
|
||||
//
|
||||
const double TAU_ALPHA_INV = 1 / TAU_ALPHA;
|
||||
const double dt_times_tau_alpha_inv = dt * tau_alpha_inv;
|
||||
|
||||
//
|
||||
// $\frac{dt}{\tau_{\alpha}}$
|
||||
//
|
||||
const double DT_TIMES_TAU_ALPHA_INV = DT * TAU_ALPHA_INV;
|
||||
|
||||
// # ##############################################################################################
|
||||
|
||||
const double COST_ADD = 1;
|
||||
const double COST_MULT = 1;
|
||||
const double COST_DIV = 1;
|
||||
const double cost_add = 1;
|
||||
const double cost_mult = 1;
|
||||
const double cost_div = 1;
|
||||
|
||||
// https://acl.inf.ethz.ch/teaching/fastcode/knowledgebase/#:~:text=How%20do%20exp(x)%2C%20sin(x)%2C%20etc.%20count%20in%20the%20flopcount%20of%20an%20algorithm%3F
|
||||
const double COST_EXP = 30;
|
||||
const double cost_exp = 30;
|
||||
|
||||
// -O3 maps each sqrt() call to an instruction
|
||||
const double COST_SQRT = 1;
|
||||
const double cost_sqrt = 1;
|
||||
|
||||
// Numerical tolerance used to avoid division by zero and unstable operations
|
||||
// when distances or norms are extremely small.
|
||||
const double EPS = 1e-9;
|
||||
|
||||
// Squared numerical tolerance
|
||||
const double EPS_SQ = EPS * EPS;
|
||||
Reference in New Issue
Block a user