MODULE SWAPMOD
      INTERFACE SWAP
      MODULE PROCEDURE SWAP_R, SWAP_I, SWAP_C
      END INTERFACE
      CONTAINS

      SUBROUTINE SWAP_R(A,B)
      IMPLICIT NONE
      DOUBLE PRECISION, INTENT (INOUT) :: A, B
      DOUBLE PRECISION                 :: TEMP
      TEMP = A; A = B; B = TEMP
      END SUBROUTINE SWAP_R

      SUBROUTINE SWAP_I(A,B)
      IMPLICIT NONE
      INTEGER, INTENT (INOUT) :: A, B
      INTEGER                 :: TEMP
      TEMP = A ; A = B ; B = TEMP
      END SUBROUTINE SWAP_I

      SUBROUTINE SWAP_C(A,B)
      IMPLICIT NONE
      CHARACTER, INTENT (INOUT) :: A, B
      CHARACTER                 :: TEMP
      TEMP = A ; A = B ; B = TEMP
      END SUBROUTINE SWAP_C
      END MODULE SWAPMOD