beach_kernel_eval_e_direct Function

public function beach_kernel_eval_e_direct(handle, ntarget, target_pos_ptr, e_ptr) result(status) bind(C, name='beach_kernel_eval_e_direct'))

Arguments

Type IntentOptional Attributes Name
type(c_ptr), value :: handle
integer(kind=c_int), value :: ntarget
type(c_ptr), value :: target_pos_ptr
type(c_ptr), value :: e_ptr

Return Value integer(kind=c_int)


Calls

proc~~beach_kernel_eval_e_direct~~CallsGraph proc~beach_kernel_eval_e_direct beach_kernel_eval_e_direct interface~eval_direct_points eval_direct_points proc~beach_kernel_eval_e_direct->interface~eval_direct_points

Source Code

  integer(c_int) function beach_kernel_eval_e_direct(handle, ntarget, target_pos_ptr, e_ptr) &
    bind(C, name='beach_kernel_eval_e_direct') result(status)
    type(c_ptr), value :: handle
    integer(c_int), value :: ntarget
    type(c_ptr), value :: target_pos_ptr
    type(c_ptr), value :: e_ptr
    type(field_kernel_handle), pointer :: kernel
    real(c_double), pointer :: target_pos(:, :)
    real(c_double), pointer :: e(:, :)

    status = require_direct_kernel(handle, kernel)
    if (status /= beach_kernel_ok) return
    if (.not. target_count_is_addressable(ntarget) .or. .not. c_associated(target_pos_ptr) .or. &
        .not. c_associated(e_ptr)) then
      status = beach_kernel_invalid_argument
      return
    end if
    if (ntarget == 0_c_int) return

    call c_f_pointer(target_pos_ptr, target_pos, [3, int(ntarget)])
    if (any(.not. ieee_is_finite(target_pos))) then
      status = beach_kernel_invalid_argument
      return
    end if
    call c_f_pointer(e_ptr, e, [3, int(ntarget)])
    call eval_direct_points(kernel%plan, kernel%state, target_pos, e)
    e = k_coulomb*e
    status = beach_kernel_ok
  end function beach_kernel_eval_e_direct