DP Langevin
Loading...
Searching...
No Matches
dplangevin.cpp
Go to the documentation of this file.
1
5
6#include <pybind11/numpy.h>
7#include <string>
8#include "dplangevin.hpp"
9
14{
15 // "Local" copies
16 n_cells = p.n_cells;
17 dt = p.dt;
18 dx = p.dx;
19 // The Langevin density field grid as a 1d vector
21 // Supplementary grids (as 1d vectors of same length)
22 aux_grid1 = grid_t(n_cells, 0.0);
23 aux_grid2 = grid_t(n_cells, 0.0);
24 k1_grid = grid_t(n_cells, 0.0);
25 k2_grid = grid_t(n_cells, 0.0);
26 k3_grid = grid_t(n_cells, 0.0);
27}
28
32{
33 quadratic_coefficient = coefficients.quadratic;
34 diffusion_coefficient = coefficients.diffusion / (dx*dx);
35}
36
39double DPLangevin::nonlinear_rhs(const int i_cell, const grid_t& density) const
40{
41 // Non-linear term, which is quadratic in the DP Langevin equation
42 const double quadratic_term
43 = -quadratic_coefficient*density[i_cell]*density[i_cell];
44
45 // For integration of diffusion
46 double diffusion_sum = 0.0;
47 const neighborhood_t& cell_wiring = grid_wiring[i_cell];
48 for (auto j_wire=0; j_wire<cell_wiring.size(); j_wire++)
49 {
50 const auto j_neighbor_cell = cell_wiring[j_wire];
51 diffusion_sum += density[j_neighbor_cell];
52 }
53 const auto diffusion_term = (
54 diffusion_coefficient*(diffusion_sum
55 - cell_wiring.size()*density[i_cell])
56 );
57 // Combine terms
58 return diffusion_term + quadratic_term;
59}
grid_t density_grid
Density field grid.
double dt
Time step, i.e, epoch-to-epoch Δt.
int n_cells
Total number of cells in n-D grid.
grid_t aux_grid1
Temporary density grid used to perform an integration step.
grid_wiring_t grid_wiring
Neighorhood topology for all grid cells.
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.
grid_t k3_grid
Runge-Kutta variable grid #3.
double dx
Grid spacing, i.e., spacing Δx between cell centers in all directions.
void set_nonlinear_coefficients(const Coefficients &coefficients)
Method to set nonlinear coefficients for deterministic integration step.
double nonlinear_rhs(const int i_cell, const grid_t &density) const
Method to set nonlinear RHS of Langevin equation for deterministic integration step.
double diffusion_coefficient
Diffusion coefficient D in DP-Langevin equation.
double quadratic_coefficient
Coefficient in nonlinear term -bρ² in DP-Langevin equation.
DPLangevin()=default
Constructor assuming default model parameters.
DPLangevin model application of BaseLangevin class integrator.
std::vector< double > grid_t
Type for density grid.
std::vector< int > neighborhood_t
Type for density grid wiring.
Container for nonlinear Langevin equation coefficients.
Container for BaseLangevin integrator parameters.