random_number_generator Derived Type

type, public :: random_number_generator

The random_number_generator class is used to encapsulate a generator or random numbers An object of this class is defined through the specification of the random seed or seeds


Type-Bound Procedures

generic, public :: create => create_random_number_grator_single, create_random_number_grator_array

  • private subroutine create_random_number_grator_single(grator, iseed)

    Class Constructor 1

    Arguments

    Type IntentOptional Attributes Name
    class(random_number_generator) :: grator

    A random_number_generator object to be defined

    integer(kind=i64) :: iseed

    An integer value with the seed of the random_number_generator

    program main use random_number_generator_utilities; ... integer :: iseed type(random_number_generator) :: my_grator ... iseed=12345; call my_grator%create(iseed); ... end program main

  • private subroutine create_random_number_grator_array(grator, iseed)

    Class Destructor 2

    Arguments

    Type IntentOptional Attributes Name
    class(random_number_generator) :: grator

    A random_number_generator object to be defined

    integer(kind=i64), intent(inout), dimension(:) :: iseed

    An integer array with the seeds of the random_number_generator

    program main use random_number_generator_utilities; ... integer :: i integer,dimension(5) :: iseed type(random_number_generator) :: my_grator ... do i=1,5 iseed(i)=12345+i; enddo call my_grator%create(iseed); ... end program main

procedure, public :: destroy => destroy_random_number_grator

  • private subroutine destroy_random_number_grator(grator)

    Class Destructor

    Arguments

    Type IntentOptional Attributes Name
    class(random_number_generator) :: grator

    A random_number_generator object to be destroyed

    program main use random_number_generator_utilities; ... integer :: iseed type(random_number_generator) :: my_grator ... iseed=12345; call my_grator%create(iseed); ... call my_grator%destroy(); ... end program main

procedure, public :: generate

  • private function generate(grator) result(rn)

    Function used to generate random numbers

    Arguments

    Type IntentOptional Attributes Name
    class(random_number_generator) :: grator

    A random_number_generator object

    Return Value real(kind=wp)

    A real value with the random number generated

    program main use random_number_generator_utilities; ... integer :: iseed real(wp) :: rnum type(random_number_generator) :: my_grator ... iseed=12345; call my_grator%create(iseed); rnum=my_grator%generate(); write(,) 'Random number= ',rnum; ... end program main

Source Code

type random_number_generator
    private
!! The random_number_generator class is used to encapsulate a generator or random numbers
!! An object of this class is defined through the specification of the random seed or seeds
        integer(i64) :: seed
        integer(i64),allocatable :: seed_array(:) 
    contains
        procedure,private :: create_random_number_grator_single
        procedure,private :: create_random_number_grator_array 
        generic,public :: create => create_random_number_grator_single,create_random_number_grator_array
        procedure,public :: destroy => destroy_random_number_grator
        procedure,public :: generate
end type random_number_generator