Consider the following example,
PROGRAM Proggie IMPLICIT NONE REAL :: A, B, C CALL sub(A) CONTAINS SUBROUTINE Sub(D) REAL :: D ! D is dummy (alias for A) REAL :: C ! local C (diff to Proggie's C) C = A**3 ! A cannot be changed D = D**3 + C ! D can be changed B = C ! B from Proggie gets new value END SUBROUTINE Sub END PROGRAM Proggie
In Sub, as A is argument associated it may not be have its value changed but may be referenced.
C in Sub is totally separate from C in Proggie, changing its value in Sub does not alter the value of C in Proggie.
For more information, click here