secondary_emission_count Function

public function secondary_emission_count(delta, charge_ratio, seed, counter) result(n)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: delta
real(kind=dp), intent(in) :: charge_ratio
integer(kind=i32), intent(in) :: seed
integer(kind=i64), intent(in) :: counter(:)

Return Value integer(kind=i32)


Calls

proc~~secondary_emission_count~~CallsGraph proc~secondary_emission_count secondary_emission_count proc~counter_uniform counter_uniform proc~secondary_emission_count->proc~counter_uniform proc~counter_key counter_key proc~counter_uniform->proc~counter_key proc~pcg64_open_uniform pcg64_open_uniform proc~counter_uniform->proc~pcg64_open_uniform pcg64_advance pcg64_advance proc~pcg64_open_uniform->pcg64_advance pcg64_create pcg64_create proc~pcg64_open_uniform->pcg64_create pcg64_destroy pcg64_destroy proc~pcg64_open_uniform->pcg64_destroy pcg64_random_double53 pcg64_random_double53 proc~pcg64_open_uniform->pcg64_random_double53 proc~open_uniform_from_double53 open_uniform_from_double53 proc~pcg64_open_uniform->proc~open_uniform_from_double53

Source Code

  integer(i32) function secondary_emission_count(delta, charge_ratio, seed, counter) result(n)
    real(dp), intent(in) :: delta, charge_ratio
    integer(i32), intent(in) :: seed
    integer(i64), intent(in) :: counter(:)
    real(dp) :: expected

    expected = delta*charge_ratio
    if (.not. ieee_is_finite(expected) .or. expected >= real(huge(n), dp)) then
      error stop 'secondary emission particle count overflowed.'
    end if
    n = int(expected, i32)
    if (counter_uniform(seed, counter, 0_i64) < expected - real(n, dp)) n = n + 1_i32
  end function secondary_emission_count