LT_lin_interp_list Subroutine

public pure subroutine LT_lin_interp_list(x_list, y_list, x_value, y_value)

Compute by use of linear interpolation the value in the middle

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: x_list(:)
real(kind=dp), intent(in) :: y_list(:)
real(kind=dp), intent(in) :: x_value
real(kind=dp), intent(out) :: y_value

Calls

proc~~lt_lin_interp_list~~CallsGraph proc~lt_lin_interp_list LT_lin_interp_list proc~find_index_adaptive find_index_adaptive proc~lt_lin_interp_list->proc~find_index_adaptive proc~find_index_bsearch find_index_bsearch proc~find_index_adaptive->proc~find_index_bsearch proc~find_index_linear find_index_linear proc~find_index_adaptive->proc~find_index_linear

Called by

proc~~lt_lin_interp_list~~CalledByGraph proc~lt_lin_interp_list LT_lin_interp_list proc~lt_get_spaced_data LT_get_spaced_data proc~lt_get_spaced_data->proc~lt_lin_interp_list proc~lt2_set_col LT2_set_col proc~lt2_set_col->proc~lt_get_spaced_data proc~lt_add_col LT_add_col proc~lt_add_col->proc~lt_get_spaced_data proc~lt_set_col LT_set_col proc~lt_set_col->proc~lt_get_spaced_data

Source Code

  pure subroutine LT_lin_interp_list(x_list, y_list, x_value, y_value)
    real(dp), intent(in)  :: x_list(:), y_list(:)
    real(dp), intent(in)  :: x_value
    real(dp), intent(out) :: y_value

    integer               :: ix, iMin, iMax
    real(dp)              :: temp

    iMin = 1
    iMax = size(x_list)

    if (x_value <= x_list(iMin)) then
       y_value = y_list(iMin)
    else if (x_value >= x_list(iMax)) then
       y_value = y_list(iMax)
    else
       ix = find_index_adaptive(x_list, x_value)
       temp = (x_value - x_list(ix-1)) / (x_list(ix) - x_list(ix-1))
       y_value = (1 - temp) * y_list(ix-1) + temp * y_list(ix)
    end if
  end subroutine LT_lin_interp_list