C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/eesupp/src/mds_byteswapr8.F,v 1.3 2009/01/09 22:51:13 jmc Exp $ C $Name: checkpoint65w $ #include "CPP_EEOPTIONS.h" subroutine MDS_BYTESWAPR8( n, arr ) C IN: C n integer :: Number of 8-byte words in arr C IN/OUT: C arr real*8 :: Array declared as real*8(n) C C Created: 05/05/99 adcroft@mit.edu (This is an unfortunate hack!!) implicit none #ifdef FAST_BYTESWAP C Arguments integer n integer(kind=8) arr(n),i64,i1 C Local integer i i64(i1) = ishft(i1 .and. z'ff00000000000000',-56).or. & ishft(i1 .and. z'00ff000000000000',-40).or. & ishft(i1 .and. z'0000ff0000000000',-24).or. & ishft(i1 .and. z'000000ff00000000', -8).or. & ishft(i1 .and. z'00000000ff000000', 8).or. & ishft(i1 .and. z'0000000000ff0000', 24).or. & ishft(i1 .and. z'000000000000ff00', 40).or. & ishft(i1 .and. z'00000000000000ff', 56) do i=1,n arr(i) = i64(arr(i)) enddo #else /* FAST_BYTESWAP */ C Arguments integer n character*(*) arr C Local integer i character*(1) cc do i=1,8*n,8 cc=arr(i:i) arr(i:i)=arr(i+7:i+7) arr(i+7:i+7)=cc cc=arr(i+1:i+1) arr(i+1:i+1)=arr(i+6:i+6) arr(i+6:i+6)=cc cc=arr(i+2:i+2) arr(i+2:i+2)=arr(i+5:i+5) arr(i+5:i+5)=cc cc=arr(i+3:i+3) arr(i+3:i+3)=arr(i+4:i+4) arr(i+4:i+4)=cc enddo #endif /* FAST_BYTESWAP */ return end