Test initial conditions are created correctly for varying number of processes. Check all the initialisation expression functions available:
| Name | Description |
|---|---|
| abs(x) | Absolute value ` |
| asin(x), acos(x), atan(x), atan(y,x) | Inverse trigonometric functions |
| ballooning(x) | Ballooning transform |
| ballooning(x,n) | Ballooning transform, using n terms (default 3) |
| cos(x) | Cosine |
| cosh(x) | Hyperbolic cosine |
| exp(x) | Exponential |
| tanh(x) | Hyperbolic tangent |
| gauss(x) | Gaussian exp(-x^2/2) / sqrt{2pi} |
| gauss(x, w) | Gaussian exp[-x^2/(2w^2)] / (w sqrt{2pi}) |
| H(x) | Heaviside function: 1 if x > 0 otherwise 0 |
| log(x) | Natural logarithm |
| max(x,y,...) | Maximum (variable arguments) |
| min(x,y,...) | Minimum (variable arguments) |
| mixmode(x) | A mixture of Fourier modes |
| mixmode(x, seed) | seed determines random phase (default 0.5) |
| power(x,y) | Exponent x^y |
| sin(x) | Sine |
| sinh(x) | Hyperbolic sine |
| sqrt(x) | Square root |
| tan(x) | Tangent |
| erf(x) | The error function |
| TanhHat(x, width, centre, steepness) | The hat function |
0.5(tanh[s (x-[c-w/2])] + tanh[s (x-[c+w/2])] ) |
Unfortunately, the ballooning transform is a bit tricky to implement
in python, so this is currently skipped.
Another limitation is that it currently can't evaluate variable references in the input file, so e.g.
[foo]
n = 4
function = cos(foo:n * y)
won't work. This probably won't be fixed until a full expression parser is implemented in python!
runtest reads data/BOUT.inp and looks for sections that contain
the function attribute, ignoring three special ones, var_x,
var_y, and var_z, which are there simply to output the correct
coordinate grids. Then it adds the following snippet of C++ to
test_initial.cxx for each of those sections that it finds:
Field3D <name>;
create_and_dump(<name>, "<name>");
where <name> is the name of each section. This creates, initialises
and writes out a Field3D according to the function attribute in
the corresponding section.
After running the test, runtest reads in the variables and checks
the answer against a python implementation (which in most cases is
just the Numpy implementation).