Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:36:11 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
d7dd491794 Jean*0001 #include "CPP_EEOPTIONS.h"
                0002 
                0003       subroutine MDS_BYTESWAPR8( n, arr )
                0004 C IN:
4d40368441 Jean*0005 C   n    integer :: Number of 8-byte words in arr
d7dd491794 Jean*0006 C IN/OUT:
4d40368441 Jean*0007 C   arr  real*8  :: Array declared as real*8(n)
d7dd491794 Jean*0008 C
                0009 C Created: 05/05/99 adcroft@mit.edu (This is an unfortunate hack!!)
                0010 
                0011       implicit none
9c4e526255 Dimi*0012 
                0013 #ifdef FAST_BYTESWAP
                0014 
                0015 C Arguments
                0016       integer n
                0017       integer(kind=8) arr(n),i64,i1
                0018 
                0019 C Local
                0020       integer i
                0021 
                0022       i64(i1) = ishft(i1 .and. z'ff00000000000000',-56).or.
                0023      &          ishft(i1 .and. z'00ff000000000000',-40).or.
                0024      &          ishft(i1 .and. z'0000ff0000000000',-24).or.
                0025      &          ishft(i1 .and. z'000000ff00000000', -8).or.
                0026      &          ishft(i1 .and. z'00000000ff000000',  8).or.
                0027      &          ishft(i1 .and. z'0000000000ff0000', 24).or.
                0028      &          ishft(i1 .and. z'000000000000ff00', 40).or.
                0029      &          ishft(i1 .and. z'00000000000000ff', 56)
                0030       do i=1,n
                0031       arr(i) = i64(arr(i))
                0032       enddo
                0033 
                0034 #else /* FAST_BYTESWAP */
                0035 
d7dd491794 Jean*0036 C Arguments
                0037       integer n
                0038       character*(*) arr
9c4e526255 Dimi*0039 
d7dd491794 Jean*0040 C Local
                0041       integer i
                0042       character*(1) cc
9c4e526255 Dimi*0043 
d7dd491794 Jean*0044       do i=1,8*n,8
                0045        cc=arr(i:i)
                0046        arr(i:i)=arr(i+7:i+7)
                0047        arr(i+7:i+7)=cc
                0048        cc=arr(i+1:i+1)
                0049        arr(i+1:i+1)=arr(i+6:i+6)
                0050        arr(i+6:i+6)=cc
                0051        cc=arr(i+2:i+2)
                0052        arr(i+2:i+2)=arr(i+5:i+5)
                0053        arr(i+5:i+5)=cc
                0054        cc=arr(i+3:i+3)
                0055        arr(i+3:i+3)=arr(i+4:i+4)
                0056        arr(i+4:i+4)=cc
                0057       enddo
9c4e526255 Dimi*0058 
                0059 #endif /* FAST_BYTESWAP */
                0060 
d7dd491794 Jean*0061       return
                0062       end