/[MITgcm]/MITgcm/pkg/mdsio/mdsio_facef_read.F
ViewVC logotype

Contents of /MITgcm/pkg/mdsio/mdsio_facef_read.F

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


Revision 1.1 - (show annotations) (download)
Wed May 28 02:59:47 2008 UTC (16 years ago) by jmc
Branch: MAIN
CVS Tags: checkpoint60, checkpoint61, checkpoint59r
read per-face file (formerly READSYMTILE_RS from ini_curvilinear_grid.F)

1 C $Header: $
2 C $Name: $
3
4 #include "MDSIO_OPTIONS.h"
5
6 C-- File mdsio_read_facefile.F:
7 C-- Contents
8 C-- o MDS_FACEF_READ_RS
9 C-- o MDS_FACEF_READ_RL <- not yet coded
10
11 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
12
13 CBOP
14 C !ROUTINE: MDS_FACEF_READ_RS
15 C !INTERFACE:
16 SUBROUTINE MDS_FACEF_READ_RS(
17 I fName, fPrec, irec,
18 U array,
19 I bi,bj, myThid )
20 C !DESCRIPTION: \bv
21 C *==========================================================*
22 C | SUBROUTINE MDS_FACEF_READ_RS
23 C *==========================================================*
24 C | Read 1 field from a file which contains all the data from
25 C | 1 "face" (= piece of domain with rectangular topology)
26 C *==========================================================*
27 C \ev
28
29 C !USES:
30 IMPLICIT NONE
31 C === Global variables ===
32 #include "SIZE.h"
33 #include "EEPARAMS.h"
34 #include "PARAMS.h"
35 #ifdef ALLOW_EXCH2
36 #include "W2_EXCH2_TOPOLOGY.h"
37 #include "W2_EXCH2_PARAMS.h"
38 #endif /* ALLOW_EXCH2 */
39
40 C !INPUT/OUTPUT PARAMETERS:
41 C == Routine arguments ==
42 CHARACTER*(*) fName
43 INTEGER fPrec
44 INTEGER irec
45 _RS array(1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)
46 INTEGER bi,bj, myThid
47 CEOP
48
49 C !FUNCTIONS:
50 INTEGER MDS_RECLEN
51 EXTERNAL MDS_RECLEN
52 INTEGER ILNBLNK
53 EXTERNAL ILNBLNK
54
55 C !LOCAL VARIABLES:
56 C == Local variables ==
57 INTEGER i,j, dUnit, iLen
58 INTEGER length_of_rec
59 CHARACTER*(MAX_LEN_MBUF) msgBuf
60 #ifdef ALLOW_EXCH2
61 INTEGER tN, dNx, dNy, tBx, tBy, tNx, tNY, jj, jBase
62 Real*4 ioBuf4(1:sNx*nSx*nPx+1)
63 Real*8 ioBuf8(1:sNx*nSx*nPx+1)
64 #else
65 Real*4 ioBuf4(1:sNx+1,1:sNy+1)
66 Real*8 ioBuf8(1:sNx+1,1:sNy+1)
67 #endif /* ALLOW_EXCH2 */
68
69 iLen = ILNBLNK(fName)
70 #ifdef ALLOW_EXCH2
71 C Figure out offset of tile within face
72 tN = W2_myTileList(bi)
73 dNx = exch2_mydnx(tN)
74 dNy = exch2_mydny(tN)
75 tBx = exch2_tbasex(tN)
76 tBy = exch2_tbasey(tN)
77 tNx = exch2_tnx(tN)
78 tNy = exch2_tny(tN)
79
80 CALL MDSFINDUNIT( dUnit, myThid )
81 length_of_rec = MDS_RECLEN( fPrec, (dNx+1), myThid )
82 OPEN( dUnit, file=fName(1:iLen), status='old',
83 & access='direct', recl=length_of_rec )
84 j = 0
85 jBase=(irec-1)*(dNy+1)
86 IF ( fPrec.EQ.precFloat32 ) THEN
87 DO jj=1+tBy,sNy+1+tBy
88 READ(dUnit,rec=jj+jBase) (ioBuf4(i),i=1,dNx+1)
89 #ifdef _BYTESWAPIO
90 CALL MDS_BYTESWAPR4( (dNx+1), ioBuf4 )
91 #endif
92 j = j+1
93 DO i=1,sNx+1
94 array(i,j,bi,bj) = ioBuf4(i+tBx)
95 ENDDO
96 ENDDO
97 ELSEIF ( fPrec.EQ.precFloat64 ) THEN
98 DO jj=1+tBy,sNy+1+tBy
99 READ(dUnit,rec=jj+jBase) (ioBuf8(i),i=1,dNx+1)
100 #ifdef _BYTESWAPIO
101 CALL MDS_BYTESWAPR8( (dNx+1), ioBuf8 )
102 #endif
103 j = j+1
104 DO i=1,sNx+1
105 array(i,j,bi,bj) = ioBuf8(i+tBx)
106 ENDDO
107 ENDDO
108 ELSE
109 WRITE(msgBuf,'(A,I8,A)') ' MDS_FACEF_READ_RS:',
110 & fPrec, ' = illegal value for fPrec'
111 CALL PRINT_ERROR( msgBuf, myThid )
112 STOP 'ABNORMAL END: S/R MDS_FACEF_READ_RS'
113 ENDIF
114 CLOSE( dUnit )
115
116 #else /* ALLOW_EXCH2 */
117
118 CALL MDSFINDUNIT( dUnit, myThid )
119 length_of_rec = MDS_RECLEN( fPrec, (sNx+1)*(sNy+1), myThid )
120 OPEN( dUnit, file=fName(1:iLen), status='old',
121 & access='direct', recl=length_of_rec )
122 IF ( fPrec.EQ.precFloat32 ) THEN
123 READ(dUnit, rec=irec) ioBuf4
124 #ifdef _BYTESWAPIO
125 CALL MDS_BYTESWAPR4( (sNx+1)*(sNy+1), ioBuf4 )
126 #endif
127 DO j=1,sNy+1
128 DO i=1,sNx+1
129 array(i,j,bi,bj) = ioBuf4(i,j)
130 ENDDO
131 ENDDO
132 ELSEIF ( fPrec.EQ.precFloat64 ) THEN
133 READ(dUnit, rec=irec) ioBuf8
134 #ifdef _BYTESWAPIO
135 CALL MDS_BYTESWAPR8( (sNx+1)*(sNy+1), ioBuf8 )
136 #endif
137 DO j=1,sNy+1
138 DO i=1,sNx+1
139 array(i,j,bi,bj) = ioBuf8(i,j)
140 ENDDO
141 ENDDO
142 ELSE
143 WRITE(msgBuf,'(A,I8,A)') ' MDS_FACEF_READ_RS:',
144 & fPrec, ' = illegal value for fPrec'
145 CALL PRINT_ERROR( msgBuf, myThid )
146 STOP 'ABNORMAL END: S/R MDS_FACEF_READ_RS'
147 ENDIF
148 CLOSE( dUnit )
149
150 #endif /* ALLOW_EXCH2 */
151
152 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
153
154 RETURN
155 END

  ViewVC Help
Powered by ViewVC 1.1.22