/[MITgcm]/MITgcm/eesupp/src/mds_byteswapr4.F
ViewVC logotype

Annotation of /MITgcm/eesupp/src/mds_byteswapr4.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.2 - (hide annotations) (download)
Wed Nov 22 09:43:27 2006 UTC (17 years, 7 months ago) by dimitri
Branch: MAIN
CVS Tags: mitgcm_mapl_00, checkpoint58u_post, checkpoint58w_post, checkpoint60, checkpoint61, checkpoint58x_post, checkpoint58t_post, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint59j, checkpoint59, checkpoint58y_post, checkpoint58v_post, checkpoint58s_post, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a
Changes since 1.1: +26 -3 lines
Alternative formulation of BYTESWAP, faster than
compiler flag -byteswapio on the Altix.

1 dimitri 1.2 C $Header: /u/gcmpack/MITgcm/eesupp/src/mds_byteswapr4.F,v 1.1 2005/08/23 13:21:08 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "CPP_EEOPTIONS.h"
5    
6     subroutine MDS_BYTESWAPR4( n, arr )
7     C IN:
8     C n integer - Number of 4-byte words in arr
9     C IN/OUT:
10     C arr real*4 - Array declared as real*4(n)
11     C
12     C Created: 05/05/99 adcroft@mit.edu (This is an unfortunate hack!!)
13    
14     implicit none
15 dimitri 1.2
16     #ifdef FAST_BYTESWAP
17    
18     C Arguments
19     integer n
20     integer(kind=4) arr(n), i32
21    
22     C Local
23     integer i
24    
25     i32(i) = ishft(i.and. z'ff000000', -24) .or.
26     & ishft(i.and. z'00ff0000', -8) .or.
27     & ishft(i.and. z'0000ff00', 8) .or.
28     & ishft(i.and. z'000000ff', 24)
29     do i = 1,n
30     arr(i) = i32(arr(i))
31     enddo
32    
33     #else /* FAST_BYTESWAP */
34    
35 jmc 1.1 C Arguments
36     integer n
37     character*(*) arr
38 dimitri 1.2
39 jmc 1.1 C Local
40     integer i
41     character*(1) cc
42 dimitri 1.2
43 jmc 1.1 do i=1,4*n,4
44     cc=arr(i:i)
45     arr(i:i)=arr(i+3:i+3)
46     arr(i+3:i+3)=cc
47     cc=arr(i+1:i+1)
48     arr(i+1:i+1)=arr(i+2:i+2)
49     arr(i+2:i+2)=cc
50     enddo
51 dimitri 1.2
52     #endif /* FAST_BYTESWAP */
53    
54 jmc 1.1 return
55     end

  ViewVC Help
Powered by ViewVC 1.1.22