PROGRAM arraysum IMPLICIT NONE INTEGER :: N DOUBLE PRECISION, ALLOCATABLE :: X(:) DOUBLE PRECISION :: mysum DOUBLE PRECISION, EXTERNAL :: vecsum PRINT *, 'Enter the number of elements in the vector (N >= 1)' READ *, N IF (N .LT. 1) THEN PRINT *, 'FATAL ERROR: N must be strictly positive!' STOP END IF ALLOCATE(X(N)) ! get the space I need CALL RANDOM_NUMBER(X) ! initialize X mysum = vecsum(N, X) ! compute sum using loop-based function PRINT *, 'SUM = ', mysum, SUM(X) ! print both answers for comparison PRINT *, 'ERROR = ', abs(mysum-SUM(X)) DEALLOCATE(X) END PROGRAM arraysum FUNCTION vecsum(N, V) IMPLICIT NONE DOUBLE PRECISION :: vecsum INTEGER, INTENT(IN) :: N DOUBLE PRECISION, INTENT(IN) :: V(*) INTEGER :: i vecsum = 0.0 DO i = 1, N vecsum = vecsum + V(i) END DO END FUNCTION vecsum