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

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

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


Revision 1.1 - (hide 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 jmc 1.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