File: interface4.f90

package info (click to toggle)
lfortran 0.58.0-3
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 54,508 kB
  • sloc: cpp: 162,179; f90: 68,251; python: 17,476; ansic: 6,278; yacc: 2,334; sh: 1,317; fortran: 892; makefile: 34; javascript: 15
file content (32 lines) | stat: -rw-r--r-- 868 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
MODULE DOT
! Module for dot product of two real arrays of rank 1.
! The caller needs to ensure that exceptions do not cause halting.
! Source https://j3-fortran.org/doc/year/18/18-007r1.pdf
    USE, INTRINSIC :: IEEE_EXCEPTIONS
    LOGICAL :: MATRIX_ERROR = .FALSE.

    INTERFACE OPERATOR(.dot.)
        MODULE PROCEDURE MULT
    END INTERFACE

CONTAINS

    REAL FUNCTION MULT (A, B)
        REAL, INTENT (IN) :: A(:), B(:)
        INTEGER I
        LOGICAL OVERFLOW

        IF (SIZE(A) /= SIZE(B)) THEN
            MATRIX_ERROR = .TRUE.
            RETURN
        END IF
        ! The processor ensures that IEEE_OVERFLOW is quiet.

        MULT = 0.0
        DO I = 1, SIZE (A)
            MULT = MULT + A(I)*B(I)
        END DO
        CALL IEEE_GET_FLAG (IEEE_OVERFLOW, OVERFLOW)
        IF (OVERFLOW) MATRIX_ERROR = .TRUE.
    END FUNCTION MULT
END MODULE DOT