constant_array.f90 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. ! Check that parameter arrays are correctly intercepted.
  2. subroutine foo_array(x, y, z)
  3. implicit none
  4. integer, parameter :: dp = selected_real_kind(15)
  5. integer, parameter :: pa = 2
  6. integer, parameter :: intparamarray(2) = (/ 3, 5 /)
  7. integer, dimension(pa), parameter :: pb = (/ 2, 10 /)
  8. integer, parameter, dimension(intparamarray(1)) :: pc = (/ 2, 10, 20 /)
  9. real(dp), parameter :: doubleparamarray(3) = (/ 3.14_dp, 4._dp, 6.44_dp /)
  10. real(dp), intent(inout) :: x(intparamarray(1))
  11. real(dp), intent(inout) :: y(intparamarray(2))
  12. real(dp), intent(out) :: z
  13. x = x/pb(2)
  14. y = y*pc(2)
  15. z = doubleparamarray(1)*doubleparamarray(2) + doubleparamarray(3)
  16. return
  17. end subroutine
  18. subroutine foo_array_any_index(x, y)
  19. implicit none
  20. integer, parameter :: dp = selected_real_kind(15)
  21. integer, parameter, dimension(-1:1) :: myparamarray = (/ 6, 3, 1 /)
  22. integer, parameter, dimension(2) :: nested = (/ 2, 0 /)
  23. integer, parameter :: dim = 2
  24. real(dp), intent(in) :: x(myparamarray(-1))
  25. real(dp), intent(out) :: y(nested(1), myparamarray(nested(dim)))
  26. y = reshape(x, (/nested(1), myparamarray(nested(2))/))
  27. return
  28. end subroutine
  29. subroutine foo_array_delims(x)
  30. implicit none
  31. integer, parameter :: dp = selected_real_kind(15)
  32. integer, parameter, dimension(2) :: myparamarray = (/ (6), 1 /)
  33. integer, parameter, dimension(3) :: test = (/2, 1, (3)/)
  34. real(dp), intent(out) :: x
  35. x = myparamarray(1)+test(3)
  36. return
  37. end subroutine