beach_zero_mode_eval Function

public function beach_zero_mode_eval(handle, ntarget, z_ptr, trace, phi_ptr, ez_ptr) result(status) bind(C, name='beach_zero_mode_eval'))

Arguments

Type IntentOptional Attributes Name
type(c_ptr), value :: handle
integer(kind=c_int), value :: ntarget
type(c_ptr), value :: z_ptr
integer(kind=c_int), value :: trace
type(c_ptr), value :: phi_ptr
type(c_ptr), value :: ez_ptr

Return Value integer(kind=c_int)


Calls

proc~~beach_zero_mode_eval~~CallsGraph proc~beach_zero_mode_eval beach_zero_mode_eval proc~eval_periodic_zero_mode eval_periodic_zero_mode proc~beach_zero_mode_eval->proc~eval_periodic_zero_mode

Source Code

  integer(c_int) function beach_zero_mode_eval(handle, ntarget, z_ptr, trace, phi_ptr, ez_ptr) &
    bind(C, name='beach_zero_mode_eval') result(status)
    type(c_ptr), value :: handle
    integer(c_int), value :: ntarget
    type(c_ptr), value :: z_ptr
    integer(c_int), value :: trace
    type(c_ptr), value :: phi_ptr, ez_ptr
    type(periodic_zero_mode_handle), pointer :: zero
    real(c_double), pointer :: z(:), phi(:), ez(:)
    real(dp) :: phi_value, field_value
    integer(i32) :: i

    status = require_charged_zero_mode(handle, zero)
    if (status /= beach_zero_mode_ok) return
    if (.not. count_is_addressable(ntarget, 3_i64, 0_i64) .or. &
        .not. c_associated(z_ptr) .or. .not. c_associated(phi_ptr) .or. .not. c_associated(ez_ptr) .or. &
        .not. trace_is_valid(trace)) then
      status = beach_zero_mode_invalid_argument
      return
    end if
    if (ntarget == 0_c_int) return

    call c_f_pointer(z_ptr, z, [int(ntarget)])
    call c_f_pointer(phi_ptr, phi, [int(ntarget)])
    call c_f_pointer(ez_ptr, ez, [int(ntarget)])
    if (any(.not. ieee_is_finite(z))) then
      status = beach_zero_mode_invalid_argument
      return
    end if

    do i = 1_i32, int(ntarget, i32)
      call eval_periodic_zero_mode( &
        zero%plan, zero%state, real(z(i), dp), int(trace, i32), phi_value, field_value &
        )
      phi(i) = real(phi_value, c_double)
      ez(i) = real(field_value, c_double)
    end do
    status = beach_zero_mode_ok
  end function beach_zero_mode_eval