DOT_PRODUCT (The GNU Fortran Compiler)

### 8.94 `DOT_PRODUCT` — Dot product function ¶

Synopsis:

  `RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)`

Description:

  `DOT_PRODUCT(VECTOR_A, VECTOR_B)` computes the dot product multiplication of two vectors VECTOR_A and VECTOR_B. The two vectors may be either numeric or logical and must be arrays of rank one and of equal size. If the vectors are `INTEGER`, `REAL` or `UNSIGNED`, the result is `SUM(VECTOR_A*VECTOR_B)`. If the vectors are `COMPLEX`, the result is `SUM(CONJG(VECTOR_A)*VECTOR_B)`. If the vectors are `LOGICAL`, the result is `ANY(VECTOR_A .AND. VECTOR_B)`. If one of VECTOR_A or VECTOR_B is `UNSIGNED`, the other one shall also be `UNSIGNED`.

Class:

  Transformational function

Arguments:

  VECTOR_A | The type shall be numeric or `LOGICAL`, rank 1. If VECTOR_B is `UNSIGNED`, VECTOR_A shall also be unsigned.
  VECTOR_B | The type shall if VECTOR_A is of numeric type or `LOGICAL` if VECTOR_A is of type `LOGICAL`. VECTOR_B shall be a rank-one array. If VECTOR_A is `UNSIGNED`, VECTOR_B shall also be unsigned.

Return value:

  If the arguments are numeric, the return value is a scalar of numeric type, `INTEGER`, `REAL`, `COMPLEX` or `UNSIGNED`. If the arguments are `LOGICAL`, the return value is `.TRUE.` or `.FALSE.`.

Example:

      program test_dot_prod
          integer, dimension(3) :: a, b
          a = (/ 1, 2, 3 /)
          b = (/ 4, 5, 6 /)
          print '(3i3)', a
          print *
          print '(3i3)', b
          print *
          print *, dot_product(a,b)
      end program test_dot_prod

Standard:

  Fortran 90 and later, extension for `UNSIGNED` (see Unsigned integers)