particle_substep_needs_halving Function

public pure function particle_substep_needs_halving(e_mid, e_ref, q, x0, x1, change_max, energy_floor) result(needs)

step 候補の中点電場 e_mid が参照電場 e_ref から change_max の割合より大きく変わり、 その差が変位 x1-x0 にわたる仕事に換算して床値を超えるとき真。

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: e_mid(3)
real(kind=dp), intent(in) :: e_ref(3)
real(kind=dp), intent(in) :: q
real(kind=dp), intent(in) :: x0(3)
real(kind=dp), intent(in) :: x1(3)
real(kind=dp), intent(in) :: change_max
real(kind=dp), intent(in), optional :: energy_floor

仕事の床値 [J](省略時は particle_substep_energy_floor_j)。

Return Value logical


Source Code

  pure logical function particle_substep_needs_halving(e_mid, e_ref, q, x0, x1, change_max, energy_floor) result(needs)
    real(dp), intent(in) :: e_mid(3), e_ref(3), q, x0(3), x1(3), change_max
    real(dp), intent(in), optional :: energy_floor
    real(dp) :: change, floor_j

    floor_j = particle_substep_energy_floor_j
    if (present(energy_floor)) floor_j = max(floor_j, energy_floor)
    change = norm2(e_mid - e_ref)
    needs = change > change_max*max(norm2(e_mid), norm2(e_ref)) .and. &
            abs(q)*change*norm2(x1 - x0) > floor_j
  end function particle_substep_needs_halving