next up previous contents
Next: Solution Up: Parallel Loops Previous: Solution

 

PURE Procedures

For each of the following examples state if the procedure Well_Izzit is PURE or not. In each case explain how you came to your decisions.

  1. FUNCTION Well_Izzit(A,B)
     REAL, DIMENSION(:,:), INTENT(IN) :: A, B
     REAL, DIMENSION(SIZE(A,1),SIZE(A,2)) :: Well_Izzit
      Well_Izzit = A + B
    END FUNCTION
  2. SUBROUTINE Well_Izzit(A,B,Rez)
     REAL, DIMENSION(:,:), INTENT(IN) :: A, B
     REAL, DIMENSION(:,:), INTENT(INOUT) :: Rez
      Rez = A + B + Rez
    END SUBROUTINE
  3. MODULE Moddie
     INTEGER, DIMENSION(2), SAVE :: x,y
    END MODULE
    FUNCTION Well_Izzit(A,B)
     USE Moddie
     REAL, DIMENSION(:,:), INTENT(IN) :: A, B
     REAL, DIMENSION(SIZE(A,1),SIZE(A,2)) :: Well_Izzit
     x = MAXLOC(A)
     y = MAXLOC(B)
     Well_Izzit = (A + B)*(A(x(1),x(2))+B(y(1),y(2)))
    END FUNCTION
  4. SUBROUTINE Well_Izzit(A,B,Rez)
     REAL, DIMENSION(:,:), INTENT(IN) :: A, B
     REAL, DIMENSION(:,:), ALLOCATABLE :: C
     REAL, DIMENSION(:,:), INTENT(INOUT) :: Rez
      ALLOCATE(C(SIZE(A,1),SIZE(A,2)))
      C = A + B 
      Rez = Transpose(C)*A*B
      DEALLOCATE(C)
    END SUBROUTINE
  5. FUNCTION Well_Izzit(A,B)
     REAL, DIMENSION(:,:) :: A, B
     REAL, DIMENSION(SIZE(A,1),SIZE(A,2)) :: Well_Izzit
      Well_Izzit = A + B
    END FUNCTION




next up previous contents
Next: Solution Up: Parallel Loops Previous: Solution

Adam Marshall ©University of Liverpool, 1996
Fri Dec 6 14:10:26 GMT 1996