pcg32_next_normal_dp Function

private function pcg32_next_normal_dp(gen, mu, sigma) result(r)

Normal deviate from a PCG32 generator.

Arguments

Type IntentOptional Attributes Name
type(pcg32_t), intent(inout) :: gen

Generator, advanced by exactly two draws.

real(kind=dp), intent(in) :: mu

Mean.

real(kind=dp), intent(in) :: sigma

Standard deviation.

Return Value real(kind=dp)


Calls

proc~~pcg32_next_normal_dp~~CallsGraph proc~pcg32_next_normal_dp pcg32_next_normal_dp interface~next_real_dp next_real_dp proc~pcg32_next_normal_dp->interface~next_real_dp proc~pcg32_next_real_dp pcg32_next_real_dp interface~next_real_dp->proc~pcg32_next_real_dp proc~splitmix64_next_real_dp splitmix64_next_real_dp interface~next_real_dp->proc~splitmix64_next_real_dp proc~pcg32_next_u64 pcg32_t%pcg32_next_u64 proc~pcg32_next_real_dp->proc~pcg32_next_u64 proc~real_from_word real_from_word proc~pcg32_next_real_dp->proc~real_from_word proc~splitmix64_next_real_dp->proc~real_from_word proc~splitmix64_next_u64 splitmix64_t%splitmix64_next_u64 proc~splitmix64_next_real_dp->proc~splitmix64_next_u64 proc~pcg32_step pcg32_step proc~pcg32_next_u64->proc~pcg32_step proc~splitmix64_next splitmix64_t%splitmix64_next proc~splitmix64_next_u64->proc~splitmix64_next proc~rotate_right32 rotate_right32 proc~pcg32_step->proc~rotate_right32 proc~u64_add u64_add proc~pcg32_step->proc~u64_add proc~u64_mul u64_mul proc~pcg32_step->proc~u64_mul proc~u64_shr u64_shr proc~pcg32_step->proc~u64_shr proc~mix64 mix64 proc~splitmix64_next->proc~mix64 proc~splitmix64_next->proc~u64_add

Called by

proc~~pcg32_next_normal_dp~~CalledByGraph proc~pcg32_next_normal_dp pcg32_next_normal_dp interface~next_normal_dp next_normal_dp interface~next_normal_dp->proc~pcg32_next_normal_dp

Variables

Type Visibility Attributes Name Initial
real(kind=dp), private :: u1
real(kind=dp), private :: u2

Source Code

   function pcg32_next_normal_dp(gen, mu, sigma) result(r)
      !! Normal deviate from a PCG32 generator.
      type(pcg32_t), intent(inout) :: gen
         !! Generator, advanced by exactly two draws.
      real(dp), intent(in) :: mu
         !! Mean.
      real(dp), intent(in) :: sigma
         !! Standard deviation.
      real(dp) :: r

      real(dp) :: u1, u2

      u1 = 1.0_dp - next_real_dp(gen)
      u2 = next_real_dp(gen)
      r = mu + sigma*sqrt(-2.0_dp*log(u1))*cos(TWO_PI*u2)
   end function pcg32_next_normal_dp