Fortran random seed initialization
Fortran 2018 specifies a new subroutine random_init()
.
Gfortran 9 and Intel oneAPI support random_init
.
Build systems such as Meson and CMake can detect compiler capabilities. random/ folder full example
Meson standard random_init
detection:
project('foo', ['fortran'])
fc = meson.get_compiler('fortran')
f18random = fc.compiles('''program test
implicit none
intrinsic :: random_init
call random_init(.false., .false.)
end''',
name: 'F2018 random_init')
CMake standard random_init
detection:
include(CheckSourceCompiles)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
# save link time, only compile is needed
check_source_compiles(Fortran "program test
implicit none
intrinsic :: random_init
call random_init(.false., .false.)
end"
f18random)
Older versions of gfortran call random_seed()
gives a unique seed.
Not every compiler vendor gives a unique seed for random_seed() however.