C $Header: /u/gcmpack/MITgcm/pkg/atm_ocn_coupler/mds_byteswap.F,v 1.4 2010/08/24 13:40:38 jmc Exp $
C $Name: $
#include "CPP_OPTIONS.h"
C-- File mds_byteswap.F: Routines to do IO byte swapping
C-- Contents
C-- o MDS_BYTESWAPR4
C-- o MDS_BYTESWAPR8
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
SUBROUTINE MDS_BYTESWAPR4( n, arr )
C IN:
C n integer :: Number of 4-byte words in arr
C IN/OUT:
C arr real*4 :: Array declared as real*4(n)
C
C Created: 05/05/99 adcroft@mit.edu (This is an unfortunate hack!!)
IMPLICIT NONE
C Arguments
INTEGER n
CHARACTER*(*) arr
#ifdef _BYTESWAPIO
C Local
integer i
character*(1) cc
C ------------------------------------------------------------------
do i=1,4*n,4
cc=arr(i:i)
arr(i:i)=arr(i+3:i+3)
arr(i+3:i+3)=cc
cc=arr(i+1:i+1)
arr(i+1:i+1)=arr(i+2:i+2)
arr(i+2:i+2)=cc
enddo
C ------------------------------------------------------------------
#endif /* _BYTESWAPIO */
RETURN
END
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
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
C Arguments
INTEGER n
CHARACTER*(*) arr
#ifdef _BYTESWAPIO
C Local
integer i
character*(1) cc
C ------------------------------------------------------------------
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
C ------------------------------------------------------------------
#endif /* _BYTESWAPIO */
RETURN
END