光電子放出速度を局所法線座標でサンプルする。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | sigma |
熱速度標準偏差 [m/s]。 |
||
| real(kind=dp), | intent(in) | :: | normal_drift_speed |
熱速度標準偏差 [m/s]。 放出法線方向のシフト速度 [m/s]。 |
||
| real(kind=dp), | intent(in) | :: | normal(3) | |||
| real(kind=dp), | intent(in) | :: | tangent1(3) | |||
| real(kind=dp), | intent(in) | :: | tangent2(3) | |||
| real(kind=dp), | intent(out) | :: | vel(3) | |||
| real(kind=dp), | intent(in), | optional | :: | vmin_normal |
放出法線速度の下限 [m/s](省略時は 0)。 |
|
| integer(kind=i32), | intent(in) | :: | rng_seed |
counter-based 乱数の seed。 |
||
| integer(kind=i64), | intent(in) | :: | rng_counter(:) |
subroutine sample_photo_emission_velocity( & sigma, normal_drift_speed, normal, tangent1, tangent2, vel, vmin_normal, rng_seed, rng_counter & ) real(dp), intent(in) :: sigma, normal_drift_speed real(dp), intent(in) :: normal(3), tangent1(3), tangent2(3) real(dp), intent(out) :: vel(3) real(dp), intent(in), optional :: vmin_normal integer(i32), intent(in) :: rng_seed integer(i64), intent(in) :: rng_counter(:) real(dp) :: vn(1), z(2, 1), vt1, vt2 call sample_flux_weighted_normal_component( & normal_drift_speed, sigma, vn, vmin_normal=vmin_normal, sigma_cutoff=default_velocity_sigma_cutoff, & uniform=[counter_uniform(rng_seed, rng_counter, 1_i64)] & ) vt1 = 0.0_dp vt2 = 0.0_dp if (sigma > 0.0_dp) then call sample_standard_normal(z, sigma_cutoff=default_velocity_sigma_cutoff, rng_seed=rng_seed, rng_counter=rng_counter) vt1 = sigma*z(1, 1) vt2 = sigma*z(2, 1) end if vel = normal*vn(1) + tangent1*vt1 + tangent2*vt2 end subroutine sample_photo_emission_velocity