So I've built my program but I'm getting errors saying the same stuff over and over:
benchmark.f90(17): error #6451: A dummy argument name is required in this context. [N] INTEGER, intent (in) :: N ------------------------^ benchmark.f90(18): error #6420: This array name is invalid in this context. [A] REAL, intent (out), DIMENSION (N), allocatable :: a --------------------------------------------------^ benchmark.f90(18): error #6646: ALLOCATABLE or POINTER attribute dictates a deferred-shape-array [A] REAL, intent (out), DIMENSION (N), allocatable :: a --------------------------------------------------^ benchmark.f90(17): error #6219: This variable, used in a specification expression, must be a dummy argument, a COMMON block object, or an object accessible through host or use association [N] INTEGER, intent (in) :: N ------------------------^ benchmark.f90(26): error #6219: This variable, used in a specification expression, must be a dummy argument, a COMMON block object, or an object accessible through host or use association [N] REAL, INTENT(in out), DIMENSION(N) :: a ----------------------------------^ benchmark.f90(48): error #6420: This array name is invalid in this context. [A] real, intent (in out), DIMENSION(N) :: a --------------------------------------------^ benchmark.f90(48): error #6219: This variable, used in a specification expression, must be a dummy argument, a COMMON block object, or an object accessible through host or use association [N] real, intent (in out), DIMENSION(N) :: a
so it obviously has a problem with my array and dimensions, but due to my lack of understanding regarding allocatable arrays I'm stumped. I've included the program and subroutines in the hope that someone can spot my problem easily.
PROGRAM BENCHMARK implicit none integer :: N REAL, Dimension(N), Allocatable :: a write(6,*)'please enter size of array' read(5,*) N call randfunc(N,a) call bubblesort(a,a) call binarysearch(a,a) deallocate (a) END PROGRAM BENCHMARK SUBROUTINE randfunc implicit none INTEGER, intent (in) :: N REAL, intent (out), DIMENSION (N), allocatable :: a Allocate(a(1:N)) CALL random_number(a) a = a*5.0 write(6,*)'this should be the randomly generated array', a END SUBROUTINE SUBROUTINE bubblesort(a) REAL, INTENT(in out), DIMENSION(N) :: a REAL :: temp INTEGER :: i, j LOGICAL :: swapped = .TRUE. DO j = SIZE(a)-1, 1, -1 swapped = .FALSE. DO i = 1, j IF (a(i) > a(i+1)) THEN temp = a(i) a(i) = a(i+1) a(i+1) = temp swapped = .TRUE. END IF END DO IF (.NOT. swapped) EXIT END DO END SUBROUTINE SUBROUTINE binarysearch REAL, intent (in out), DIMENSION(N) :: a INTEGER :: ran, start, finish, mid INTEGER :: i, N, val i = 1 do i = 1, N READ(*,*) a(i) end do write(6,*) 'Enter Value' read(5,*) val start = 1 finish = N ran = finish - start mid = (start + finish) /2 do while( a(mid) /= val .and. ran > 0) if (val > a(mid)) then start = mid + 1 else finish = mid - 1 end if ran = finish - start mid = (start + finish)/2 end do if( a(mid) /= val) then write(*,*) val, 'NOT FOUND' else write(*,*) 'VALUE AT' , mid end if END SUBROUTINE