Build the PCG32 generator belonging to stream_id. The derived seed
drives a local SplitMix64 which supplies both the LCG state and the
stream selector.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
subroutine stream_for_pcg32(master_seed,stream_id,gen)!! Build the PCG32 generator belonging to `stream_id`. The derived seed!! drives a local SplitMix64 which supplies both the LCG state and the!! stream selector.integer(int64),intent(in)::master_seedinteger(default_int),intent(in)::stream_idtype(pcg32_t),intent(out)::gentype(splitmix64_t)::seederinteger(int64)::initial_state,initial_seqcall seeder%seed(stream_seed(master_seed,stream_id))! Two separate statements on purpose: Fortran does not specify the order in! which actual arguments are evaluated, so two `seeder%next()` calls inside! one call statement would not be reproducible across compilers.initial_state=seeder%next()initial_seq=seeder%next()call gen%seed(initial_state,initial_seq)end subroutine stream_for_pcg32