Fills v with consecutive standard normal draws of one stream, starting at draw.
v is a rank-1 real(real64) array, intent(out); i is integer(int32) or
integer(int64); seed and draw are integer(int64). Element k is exactly
pf_random_normal_at(seed, i, draw+k-1), so a prefix is a prefix and a chunked fill agrees
with a whole one. A zero-sized v is a defined no-op.
This is why the coordinate-addressed realisation exists. Each element runs its own
rejection loop in its own sub-stream, so the fill splits at any boundary and gives the same
answer at any thread count -- which a stream walk cannot, at any speed. It takes no
threads= for exactly that reason: the caller wraps !$omp parallel do around whatever
chunking they like.
It does not agree with a loop of %normal. See pf_random_normal_at.
pf_random_fill_normal from an integer(int32) stream index.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=int64), | intent(in) | :: | seed |
the stream family's seed |
||
| integer(kind=int32), | intent(in) | :: | i |
stream index; sign-extends, so any value is valid |
||
| real(kind=real64), | intent(out) | :: | v(:) |
filled with values |
||
| integer(kind=int64), | intent(in), | optional | :: | draw |
1-based starting value index; absent means 1 |
pf_random_fill_normal from an integer(int64) stream index.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=int64), | intent(in) | :: | seed |
the stream family's seed |
||
| integer(kind=int64), | intent(in) | :: | i |
stream index; every value is valid |
||
| real(kind=real64), | intent(out) | :: | v(:) |
filled with values |
||
| integer(kind=int64), | intent(in), | optional | :: | draw |
1-based starting value index; absent means 1 |