tem_eval_heaviside_gibbs Function

public function tem_eval_heaviside_gibbs(me, coord, n) result(res)

Arguments

Type IntentOptional Attributes Name
type(tem_heaviside_gibbs_type) :: me

Description of the Heaviside function

real(kind=rk), intent(in) :: coord(n,3)

Coordinates to evaluate the function for 1st index goes over number of elements and 2nd index goes over x,y,z coordinates

integer, intent(in) :: n

number of return values

Return Value real(kind=rk), (n)

return value of the function


Source Code

  function tem_eval_heaviside_gibbs( me, coord, n) result(res)
    ! ---------------------------------------------------------------------------
    !> Description of the Heaviside function
    type(tem_heaviside_gibbs_type) :: me
    !> number of return values
    integer, intent( in ) :: n
    !> Coordinates to evaluate the function for
    !! 1st index goes over number of elements and
    !! 2nd index goes over x,y,z coordinates
    real(kind=rk), intent( in ) :: coord(n,3)
    !> return value of the function
    real( kind=rk ) :: res(n)
    ! ---------------------------------------------------------------------------
    integer :: iPoint
    real(kind=rk) :: dist, z
    ! ---------------------------------------------------------------------------

    ! Loop over all the points
    do iPoint = 1, n

      ! Distance from the center
      dist = me%center - coord(iPoint,1)

      z = 0.5_rk * dist * sqrt(1.0_rk-me%center**2) * (2.0_rk * real(me%order,rk) + 1.0_rk)

      ! Calculate the point value
      res(iPoint) = 0.5 * (me%left + me%right) + ( dsinint(z)/PI ) * ( me%left - me%right )

    end do

  end function tem_eval_heaviside_gibbs