blas_interfaces.f90 Source File


This file depends on

sourcefile~~blas_interfaces.f90~~EfferentGraph sourcefile~blas_interfaces.f90 blas_interfaces.f90 sourcefile~odrpack_kinds.f90 odrpack_kinds.F90 sourcefile~blas_interfaces.f90->sourcefile~odrpack_kinds.f90

Files dependent on this one

sourcefile~~blas_interfaces.f90~~AfferentGraph sourcefile~blas_interfaces.f90 blas_interfaces.f90 sourcefile~odrpack.f90 odrpack.f90 sourcefile~odrpack.f90->sourcefile~blas_interfaces.f90 sourcefile~odrpack_core.f90 odrpack_core.f90 sourcefile~odrpack.f90->sourcefile~odrpack_core.f90 sourcefile~odrpack_reports.f90 odrpack_reports.f90 sourcefile~odrpack.f90->sourcefile~odrpack_reports.f90 sourcefile~odrpack_core.f90->sourcefile~blas_interfaces.f90 sourcefile~example1.f90 example1.f90 sourcefile~example1.f90->sourcefile~odrpack.f90 sourcefile~example2.f90 example2.f90 sourcefile~example2.f90->sourcefile~odrpack.f90 sourcefile~example3.f90 example3.f90 sourcefile~example3.f90->sourcefile~odrpack.f90 sourcefile~example4.f90 example4.f90 sourcefile~example4.f90->sourcefile~odrpack.f90 sourcefile~example5.f90 example5.f90 sourcefile~example5.f90->sourcefile~odrpack.f90 sourcefile~odrpack_capi.f90 odrpack_capi.f90 sourcefile~odrpack_capi.f90->sourcefile~odrpack.f90 sourcefile~odrpack_capi.f90->sourcefile~odrpack_core.f90 sourcefile~odrpack_reports.f90->sourcefile~odrpack_core.f90

Source Code

module blas_interfaces
  !! Single and double precision interfaces for the BLAS procedures used by odrpack.
   use odrpack_kinds, only: sp, dp
   implicit none

   interface

      ! pure real(sp) function sasum(n, x, incx)
      ! !! Sum of magnitudes of vector components.
      !    import :: sp
      !    integer, intent(in) :: n
      !    real(sp), intent(in) :: x(*)
      !    integer, intent(in) :: incx
      ! end function sasum

      pure real(dp) function dasum(n, x, incx)
      !! Sum of magnitudes of vector components.
         import :: dp
         integer, intent(in) :: n
         real(dp), intent(in) :: x(*)
         integer, intent(in) :: incx
      end function dasum

      ! pure subroutine saxpy(n, a, x, incx, y, incy)
      ! !! Computation `Y = A*X + Y`.
      !    import :: sp
      !    integer, intent(in) :: n
      !    real(sp), intent(in) :: a
      !    real(sp), intent(in) :: x(*)
      !    integer, intent(in) :: incx
      !    real(sp), intent(inout) :: y(*)
      !    integer, intent(in) :: incy
      ! end subroutine saxpy

      pure subroutine daxpy(n, a, x, incx, y, incy)
      !! Computation `Y = A*X + Y`.
         import :: dp
         integer, intent(in) :: n
         real(dp), intent(in) :: a
         real(dp), intent(in) :: x(*)
         integer, intent(in) :: incx
         real(dp), intent(inout) :: y(*)
         integer, intent(in) :: incy
      end subroutine daxpy

      ! pure subroutine scopy(n, x, incx, y, incy)
      ! !! Vector copy `Y = X`.
      !    import :: sp
      !    integer, intent(in) :: n
      !    real(sp), intent(in) :: x(*)
      !    integer, intent(in) :: incx
      !    real(sp), intent(inout) :: y(*)
      !    integer, intent(in) :: incy
      ! end subroutine scopy

      pure subroutine dcopy(n, x, incx, y, incy)
      !! Vector copy `Y = X`.
         import :: dp
         integer, intent(in) :: n
         real(dp), intent(in) :: x(*)
         integer, intent(in) :: incx
         real(dp), intent(inout) :: y(*)
         integer, intent(in) :: incy
      end subroutine dcopy

      ! pure real(sp) function sdot(n, x, incx, y, incy)
      ! !! Inner product of vectors.
      !    import :: sp
      !    integer, intent(in) :: n
      !    real(sp), intent(in) :: x(*)
      !    integer, intent(in) :: incx
      !    real(sp), intent(in) :: y(*)
      !    integer, intent(in) :: incy
      ! end function sdot

      pure real(dp) function ddot(n, x, incx, y, incy)
      !! Inner product of vectors.
         import :: dp
         integer, intent(in) :: n
         real(dp), intent(in) :: x(*)
         integer, intent(in) :: incx
         real(dp), intent(in) :: y(*)
         integer, intent(in) :: incy
      end function ddot

      ! pure real(sp) function snrm2(n, x, incx)
      ! !! Euclidean length (L2 Norm) of vector.
      !    import :: sp
      !    integer, intent(in) :: n
      !    real(sp), intent(in) :: x(*)
      !    integer, intent(in) :: incx
      ! end function snrm2

      pure real(dp) function dnrm2(n, x, incx)
      !! Euclidean length (L2 Norm) of vector.
         import :: dp
         integer, intent(in) :: n
         real(dp), intent(in) :: x(*)
         integer, intent(in) :: incx
      end function dnrm2

      ! pure subroutine srot(n, x, incx, y, incy, c, s)
      ! !! Apply Givens rotation.
      !    import :: sp
      !    integer, intent(in) :: n
      !    real(sp), intent(inout) :: x(*)
      !    integer, intent(in) :: incx
      !    real(sp), intent(inout) :: y(*)
      !    integer, intent(in) :: incy
      !    real(sp), intent(in) :: c
      !    real(sp), intent(in) :: s
      ! end subroutine srot

      pure subroutine drot(n, x, incx, y, incy, c, s)
      !! Apply Givens rotation.
         import :: dp
         integer, parameter :: wp = dp
         integer, intent(in) :: n
         real(dp), intent(inout) :: x(*)
         integer, intent(in) :: incx
         real(dp), intent(inout) :: y(*)
         integer, intent(in) :: incy
         real(dp), intent(in) :: c
         real(dp), intent(in) :: s
      end subroutine drot

      ! pure subroutine srotg(a, b, c, s)
      ! !! Construct plane Givens rotation.
      !    import :: sp
      !    real(sp), intent(in) :: a
      !    real(sp), intent(in) :: b
      !    real(sp), intent(out) :: c
      !    real(sp), intent(out) :: s
      ! end subroutine srotg

      pure subroutine drotg(a, b, c, s)
      !! Construct plane Givens rotation.
         import :: dp
         real(dp), intent(in) :: a
         real(dp), intent(in) :: b
         real(dp), intent(out) :: c
         real(dp), intent(out) :: s
      end subroutine drotg

      ! pure subroutine sscal(n, a, x, incx)
      ! !! Vector scale `X = A*X`.
      !    import :: sp
      !    integer, intent(in) :: n
      !    real(sp), intent(in) :: a
      !    real(sp), intent(inout) :: x(*)
      !    integer, intent(in) :: incx
      ! end subroutine sscal

      pure subroutine dscal(n, a, x, incx)
      !! Vector scale `X = A*X`.
         import :: dp
         integer, intent(in) :: n
         real(dp), intent(in) :: a
         real(dp), intent(inout) :: x(*)
         integer, intent(in) :: incx
      end subroutine dscal

      ! pure subroutine sswap(n, x, incx, y, incy)
      ! !! Interchange vectors.
      !    import :: sp
      !    integer, intent(in) :: n
      !    real(sp), intent(in) :: x(*)
      !    integer, intent(in) :: incx
      !    real(sp), intent(inout) :: y(*)
      !    integer, intent(in) :: incy
      ! end subroutine sswap

      pure subroutine dswap(n, x, incx, y, incy)
      !! Interchange vectors.
         import :: dp
         integer, intent(in) :: n
         real(dp), intent(in) :: x(*)
         integer, intent(in) :: incx
         real(dp), intent(inout) :: y(*)
         integer, intent(in) :: incy
      end subroutine dswap

      ! pure integer function isamax(n, x, incx)
      ! !! Find largest component of vector.
      !    import :: sp
      !    integer, intent(in) :: n
      !    real(sp), intent(in) :: x(*)
      !    integer, intent(in) :: incx
      ! end function isamax

      pure integer function idamax(n, x, incx)
      !! Find largest component of vector.
         import :: dp
         integer, intent(in) :: n
         real(dp), intent(in) :: x(*)
         integer, intent(in) :: incx
      end function idamax

   end interface

end module blas_interfaces