DP Langevin
Loading...
Searching...
No Matches
langevin_integrate_rungekutta.cpp
Go to the documentation of this file.
1
5
6#include "langevin_types.hpp"
7#include "langevin_base.hpp"
8
14{
15 auto step1 = [&](grid_t& aux_grid, grid_t& k1_grid, const double dtf)
16 {
17 for (auto i=0; i<n_cells; i++)
18 {
20 aux_grid[i] = density_grid[i] + k1_grid[i]*dtf;
21 }
22 };
23 auto step2or3 = [&](
24 const grid_t& aux_grid_in, grid_t& aux_grid_out, grid_t& k23_grid,
25 const double dtf)
26 {
27 for (auto i=0; i<n_cells; i++)
28 {
29 k23_grid[i] = nonlinear_rhs(i, aux_grid_in);
30 aux_grid_out[i] = density_grid[i] + k23_grid[i]*dtf;
31 }
32 };
33 auto step4 = [&](
34 const grid_t& aux_grid, const grid_t& k1_grid, const grid_t& k2_grid,
35 const grid_t& k3_grid, rng_t& rng, const double dtf)
36 {
37 mean_density = 0.0;
38 for (auto i=0; i<n_cells; i++)
39 {
40 // Runge-Kutta 4th step
41 auto k4 = nonlinear_rhs(i, aux_grid);
42 density_grid[i] += (k1_grid[i] + 2*(k2_grid[i]+k3_grid[i]) +k4)*dtf;
43 // Stochastic step
47 // Incrementally compute mean density
49 }
50 mean_density /= static_cast<double>(n_cells);
51 };
52
53 step1(aux_grid1, k1_grid, dt/2);
54 step2or3(aux_grid1, aux_grid2, k2_grid, dt/2);
55 step2or3(aux_grid2, aux_grid1, k3_grid, dt);
56 step4(aux_grid1, k1_grid, k2_grid, k3_grid, rng, dt/6);
57}
poisson_dist_t poisson_sampler
Function generating Poisson variates.
grid_t density_grid
Density field grid.
double lambda
Dornic method stochastic-step variable.
double dt
Time step, i.e, epoch-to-epoch Δt.
int n_cells
Total number of cells in n-D grid.
double lambda_on_explcdt
Dornic method stochastic-step variable.
virtual double nonlinear_rhs(const int i_cell, const grid_t &field) const
Method to set nonlinear RHS of Langevin equation for deterministic integration step: to be defined by...
grid_t aux_grid1
Temporary density grid used to perform an integration step.
double mean_density
Grid-average of density field.
void integrate_rungekutta(rng_t &rng)
Runge-Kutta + stochastic integration + grid update.
grid_t aux_grid2
Temporary density grid used to perform an integration step.
grid_t k1_grid
Runge-Kutta variable grid #1.
grid_t k2_grid
Runge-Kutta variable grid #2.
gamma_dist_t gamma_sampler
Function generating gamma variates.
grid_t k3_grid
Runge-Kutta variable grid #3.
Base class for Langevin equation integrator.
Type definitions for BaseLangevin integrator.
std::gamma_distribution< double > gamma_dist_t
Type for function generating gamma variates.
std::vector< double > grid_t
Type for density grid.
std::poisson_distribution< int > poisson_dist_t
Type for function generating Poisson variates.
std::mt19937 rng_t
Use Mersenne Twister random number generator.