11 use,
intrinsic :: iso_fortran_env
23 integer,
parameter,
public :: &
34 real(real64),
allocatable :: random_numbers(:, :)
52 class(wigner_distribution_t),
intent(inout) :: this
53 integer,
intent(in) :: num_modes
54 integer(int64),
intent(in) :: seed
56 integer(int64) :: local_seed
62 this%num_modes = num_modes
65 safe_allocate(this%random_numbers(1:num_modes, 1:2))
73 class(wigner_distribution_t),
intent(inout) :: this
76 safe_deallocate_a(this%random_numbers)
88 class(wigner_distribution_t),
intent(inout) :: this
89 real(real64),
intent(in) :: sigma(1:this%num_modes)
90 real(real64),
intent(in) :: mu(1:this%num_modes)
91 integer,
intent(in) :: set
93 real(real64) :: values(1:this%num_modes)
97 assert(set==wigner_q .or. set==
wigner_p)
98 values = sigma*this%random_numbers(:,set) + mu
This module provides a random number generator for a normalized gaussian distribution.
real(real64) function, dimension(1:n, 1:2), public normal_distribution_get_random(seed, n)
This function implements the Box Mueller algorithm to produce n pairs of normal distributed random nu...
integer, parameter, public wigner_p
real(real64) function, dimension(1:this%num_modes) wigner_distribution_get(this, sigma, mu, set)
Get random numbers with given standard deviation and mean per mode.
subroutine wigner_distribution_init(this, num_modes, seed)
Initialize the Wigner distribution.
subroutine wigner_distribution_end(this)
Deallocate internal memory.
Class describing a Wigner distribution for sampling initial conditions in multi-trajectory Ehrenfest ...