-
Notifications
You must be signed in to change notification settings - Fork 21
/
diffeq.dox
102 lines (81 loc) · 4.2 KB
/
diffeq.dox
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*!
\page diffeq Deterministic and stochastic differential equations in walker
This page collects some notes on the requirements and software design of the main
ingredient of @ref walker, the differential equations classes.
@section diffeq_req General requirements
Numerical time integration of ordinary and stochastic differential equations
(ODEs, SDEs) is probably the single most important ingredient of a
continuum-realm particle-solver. This must be:
- High-performance,
- Easy to maintain,
- The design must scale well with adding new functionality, i.e., adding new
equations and/or new models for already implemented equations should
require as little code as possible,
- Should easily accommodate various advancement algorithms on different
hardware end/or using various parallelization strategies.
There should be a possibility to quickly prototype a new equation, e.g., in a
test-bed class. This would be used to:
- Verify its invariant probability density function (PDF),
- Explore the behavior of its statistics,
- Integrate multiple variables (coupled or non-coupled).
Questions:
- Should a base class hold a single random number generation (RNG) used by all
specific (derived) SDEs or different SDEs should be able to instantiate and
use their own (possibly different) RNGs?
@m_div{m-block m-right-m m-note}
Currently, each derived SDE may access its own RNG, but the user must configure
it so. See also a more detailed page on @ref rngs_input.
@m_enddiv
@section diffeq_reqbase Requirements on a generic differential equation base class
ODEs and SDEs should inherit from a base class (if a multiple-policy design is
adopted) that should have generic data and member functions, which facilitates
code-reuse.
The base class should work for both _N_ = 1 or _N_ > 1, i.e., single-variate or
multi-variate equation classes.
The differential equation base class should have pure virtual interfaces for:
- Setting initial conditions on the particles at _t_ = 0, e.g.,
@code{.cpp}initialize()@endcode
- Advancing the particles in time, e.g., @code{.cpp}advance()@endcode
@section diffeq_policies Possible policies of a differential equation base class
Specific equation types (e.g., Ornstein-Uhlenbeck, Dirichlet, skew-normal, etc.),
should derive from a base class, forwarding base class policies, i.e., a
specific SDE class should not hard-code any base class policy.
Specific SDE classes may have their own policies (specific to the given SDE).
@subsection diffeq_initpolicy Initialization policy
Specifies how the initialization of the particles happen at _t_ = 0. Possible
initialization policies:
- Do nothing: leave memory associated to particle data uninitialized
- Zero: zero particle properties
- Fill with one given constant: single-delta-spike PDF
- Fill with different constants given per variable
- Sample from given PDF, _N_ = 1
- Sample from different PDF given per variable, _N_ > 1 (independent)
- Sample from given JPDF, _N_ > 1 (possibly non-independent)
- Pre-cycle properties using a given equation and its constant coefficients
for:
+ a given time period
+ a given number of time steps
+ until convergence is reached for given statistics and convergence criteria
@subsection diffeq_coeffpolicy Coefficients policy
Specifies how the differential equation coefficients, e.g., _b_, _S_, and
\f$\kappa\f$ for
the Dirichlet SDE, are used by the equation. Possible coefficients policies:
- _Constant:_ initialized once, used for all _t_ > 0
- _Functional:_ @code{.cpp}advance()@endcode algorithm queries coefficients
at every update via coefficients-policy functions, e.g., time, various
statistics
@subsection diffeq_timeint Time-integration policy
Specifies what time-integrator to use when advancing particles. Possible
time-integration policies:
- Euler-Maruyama
- Milstein
- Runge-Kutta (with various orders)
- Various other explicit and implicit integrators, see [Kloeden &
Platen](https://www.springer.com/us/book/9783540540625)
Questions
- What new requirements and constraints does spatial inhomogeneity entail?
@m_div{m-block m-right-m m-note}
Most of the above is implemented under src/DiffEq/, with the forward Euler
(Euler-Maruyama) time integration scheme.
@m_enddiv
*/