This program is made for solving the equilibrium problem that appears in the Ulf Dieckmann and Richard Law's population dynamics model. The solution to this problem can be described as a function that satisfies an integral equation. The second order closure of the third spatial moment is used in this equation: $$ T^{(2)}_{\alpha\beta\gamma}(x, y) = \dfrac{1}{\alpha + \beta} \left( \alpha \dfrac{C(x)C(y)}{N} + \beta \dfrac{C(x)C(y - x)}{N} + \gamma \dfrac{C(y)C(y - x)}{N} - \beta N^3 \right). $$
See the papers to get more information about the model and the problem:
- https://user.iiasa.ac.at/~dieckman/reprints/DieckmannLaw2000.pdf
- https://user.iiasa.ac.at/~dieckman/reprints/LawDieckmann2000a.pdf
- https://user.iiasa.ac.at/~dieckman/reprints/MurrellEtal2004.pdf
There is a makefile that processes the project compilation. You can use the
following compilation flags for g++ to change some special behaviour. These
flags just define preprocess variables:
| Flag | Description | Default value (if present) |
|---|---|---|
| -DSHOUT | Turn off full info about iterations and turn on a progress bar | |
| -DASCETIC | Turn off all output information (even a progress bar) except the first moment value | |
| -DBAR_WIDTH= | Set a progress bar width in character number | 70 |
| -DBAR_CHAR= | Set a progress bar character | '#' |
make
make clean
You can give the program command line arguments. Each argument has a name that starts with '-' and usually contains only one letter. The argument value follows its name. All the arguments, you don't specify, will be set in the default values.
| Argument | Description | Type | Default value |
|---|---|---|---|
| -D | Environment dimesionality | 1, 2 or 3 | 1 |
| -r | Integration area size (segment length or ball radius in 1D, 2D and 3D respectively). Set it with n if you want the size to be calculated automatically |
Positive real or n |
20.0 |
| -i | Iterations count | Positive integer | 1000 |
| -n | Grid nodes count | Positive integer | 5000 |
| -A | Alpha parameter of the closure | Real | 1.0 |
| -B | Beta parameter of the closure | Real | 1.0 |
| -G | Gamma parameter of the closure | Real | 1.0 |
| -d | Environmental death rating | Real | 0.0 |
| -s | Competition rating (d') |
Real | 1.0 |
| -b | Birth rating | Real | 1.0 |
| -p | Path to store a calculated second moment (set it with n if you don't want to save results in the file) |
String or n |
"graph.plt" |
| -e | Accurancy of the output in decimal places | Positive integer | 5 |
| -h | Show the reference about command line parameters | None | None |
You can also specify the dispersal and competiton kernels. The kernel argument has the following form:
-k* [parameters]
where * is a letter that defines a kernel type, [parameters] is a
list of the kernel parameters (real numbers). The dispersal kernel parameters
are defined before the competiton ones. The following table describes
possible kernel types:
| Letter | Kernel description | Parameters |
|---|---|---|
| n | Gausian kernels | The standart deviations for the dispersal and competiton kernels |
| k | Equal kurtic kernels | s0m = s0w and s1m = s1w (two numbers) |
| K | General kurtic kernels | s0m, s1m, s0w, and s1w |
| e | Danchenko's exponential kerenels | A and B |
| r | Roughgarden kernels | sm, gamma_m, sw, and gamma_w |
| p | Exponent polynomial kernels | am, bm, aw, and bw |
| c | Constant kernels | Dispersal radius and competition radius |
Default kernels are the equal kurtic kernels with the parameters 1.0 1.0.
By default the program uses nonlinear Neuman's method.
You can change the method, but only in the 1D or 3D case. When using linear
methods the program automatically sets the arguments -A 1 -B 0 -G 0,
making the equation linear (the user-specified values for these arguments are
ignored in that case). Using linear methods in 2D case is ignored.
To set the method use the following argument:
-m <method name>
where <method name> can be one of the folowing:
| Name | Description |
|---|---|
| neuman | Nonlinear Neuman's method. This value is default and can be used for all dimensions |
| lneuman | Neuman's method modification for the linear case |
| nystrom | Nystrom's method that uses an algebraic equation system approximation |
./neuman -i 2000 -r 2.2 -kn 1.3 3.45 -p solution.txt -r n -D 3 -s 2.0 -A 0.3
The program saves a calculated second moment in the file, defined by the
-p argument value (if it doesn't equal to n), in two columns
(for x and for C(x)). It also prints the first moment value in the standart
output if -DASCETIC is set. If -DSHOUT is set the program prints
the progress bar and, after completion, the first moment value and the second
moment value in zero. If neither -DASCETIC nor -DSHOUT is set then the
program prints the value of the approximate first moment on each iteration.
Programm uses fftw-3.3.7 library for performing convolutions using Fourier method.