demo_swap.f90 Source File


Source Code

     program demo_swap
     use M_sort, only : swap
     integer             :: iarray(2)=[10,20]
     real                :: rarray(2)=[11.11,22.22]
     doubleprecision     :: darray(2)=[1234.56789d0,9876.54321d0]
     complex             :: carray(2)=[(1234,56789),(9876,54321)]
     logical             :: larray(2)=[.true.,.false.]
     character(len=16)   :: string(2)=["First string    ","The other string"]

     integer             :: one(13)=1
     integer             :: two(13)=2

     integer             :: one2(3,3)=1
     integer             :: two2(3,3)=2

        print *, "integers before swap", iarray
        call swap (iarray(1), iarray(2))
        print *, "integers after swap ", iarray

        print *, "reals before swap", rarray
        call swap (rarray(1), rarray(2))
        print *, "reals after swap ", rarray

        print *, "doubles before swap", darray
        call swap (darray(1), darray(2))
        print *, "doubles after swap ", darray

        print *, "complexes before swap", carray
        call swap (carray(1), carray(2))
        print *, "complexes after swap ", carray

        print *, "logicals before swap", larray
        call swap (larray(1), larray(2))
        print *, "logicals after swap ", larray

        print *, "strings before swap", string
        call swap (string(1), string(2))
        print *, "strings after swap ", string

        write(*,*)'swap two vectors'
        write(*,'("one before: ",*(i0,:","))') one
        write(*,'("two before: ",*(i0,:","))') two
        call swap(one,two)
        write(*,'("one after: ",*(i0,:","))') one
        write(*,'("two after: ",*(i0,:","))') two

        write(*,*)'given these arrays initially each time '
        one2=1
        two2=2
        call printarrays()

        write(*,*)'swap two rows'
        one2=1
        two2=2
        call swap(one2(2,:),two2(3,:))
        call printarrays()

        write(*,*)'swap two columns'
        one2=1
        two2=2
        call swap(one2(:,2),two2(:,2))
        call printarrays()

        write(*,*)'swap two arrays with same number of elements'
        one2=1
        two2=2
        call swap(one2,two2)
        call printarrays()

        contains
        subroutine printarrays()
        integer :: i
        do i=1,size(one2(1,:))
           write(*,'(*(i0,:","))') one2(i,:)
        enddo
        write(*,*)
        do i=1,size(two2(1,:))
           write(*,'(*(i0,:","))') two2(i,:)
        enddo
        end subroutine printarrays

     end program demo_swap