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

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

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


Revision 1.6 - (hide annotations) (download)
Sun Aug 30 18:09:40 2009 UTC (14 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: HEAD
Changes since 1.5: +1 -1 lines
FILE REMOVED
remove since was not used (a stop was added 3 years ago)

1 jmc 1.6 C $Header: /u/gcmpack/MITgcm/pkg/mdsio/mdsio_readtile.F,v 1.5 2009/08/05 23:17:54 jmc Exp $
2 jmc 1.2 C $Name: $
3 adcroft 1.1
4     #include "MDSIO_OPTIONS.h"
5    
6 jmc 1.2 SUBROUTINE MDS_READTILE(
7 adcroft 1.1 I fName,
8     I filePrec,
9     I arrType,
10     I nNz,
11     O arr,
12     I bi, bj,
13     I irecord,
14     I myThid )
15     C
16     C Arguments:
17     C
18     C fName string base name for file to read
19     C filePrec integer number of bits per word in file (32 or 64)
20     C arrType char(2) declaration of "arr": either "RS" or "RL"
21     C nNz integer size of third dimension: normally either 1 or Nr
22     C arr RS/RL array to read into, arr(:,:,nNz,:,:)
23     C irecord integer record number to read
24     C myThid integer thread identifier
25     C
26 jmc 1.2 C MDS_READTILE first checks to see if the file "fName" exists, then
27 adcroft 1.1 C if the file "fName.data" exists and finally the tiled files of the
28     C form "fName.xxx.yyy.data" exist. Currently, the meta-files are not
29     C read because it is difficult to parse files in fortran.
30     C The precision of the file is decsribed by filePrec, set either
31     C to floatPrec32 or floatPrec64. The precision or declaration of
32     C the array argument must be consistently described by the char*(2)
33     C string arrType, either "RS" or "RL". nNz allows for both 2-D and
34     C 3-D arrays to be handled. nNz=1 implies a 2-D model field and
35     C nNz=Nr implies a 3-D model field. irecord is the record number
36     C to be read and must be >= 1. The file data is stored in
37     C arr *but* the overlaps are *not* updated. ie. An exchange must
38     C be called. This is because the routine is sometimes called from
39     C within a MASTER_THID region.
40     C
41     C Created: 03/16/99 adcroft@mit.edu
42    
43     implicit none
44     C Global variables / common blocks
45     #include "SIZE.h"
46     #include "EEPARAMS.h"
47    
48     C Routine arguments
49     character*(*) fName
50     integer filePrec
51     character*(2) arrType
52     integer nNz
53 jmc 1.5 _RL arr(*)
54 adcroft 1.1 integer bi, bj
55     integer irecord
56     integer myThid
57     C Functions
58     integer ILNBLNK
59     integer MDS_RECLEN
60     C Local variables
61 jmc 1.2 character*(MAX_LEN_FNAM) dataFName
62 adcroft 1.1 integer iG,jG,irec,j,k,dUnit,IL
63     logical exst
64     Real*4 r4seg(sNx)
65     Real*8 r8seg(sNx)
66     logical globalFile,fileIsOpen
67     integer length_of_rec
68     character*(max_len_mbuf) msgbuf
69     C ------------------------------------------------------------------
70    
71 jmc 1.3 STOP 'S/R MDS_READTILE: not maintained'
72    
73 adcroft 1.1 C Only do I/O if I am the master thread
74     _BEGIN_MASTER( myThid )
75    
76     C Record number must be >= 1
77     if (irecord .LT. 1) then
78     write(msgbuf,'(a,i9.8)')
79 jmc 1.2 & ' MDS_READTILE: argument irecord = ',irecord
80 adcroft 1.1 call print_message( msgbuf, standardmessageunit,
81     & SQUEEZE_RIGHT , mythid)
82     write(msgbuf,'(a)')
83 jmc 1.2 & ' MDS_READTILE: Invalid value for irecord'
84 adcroft 1.1 call print_error( msgbuf, mythid )
85 jmc 1.2 stop 'ABNORMAL END: S/R MDS_READTILE'
86 adcroft 1.1 endif
87    
88     C Assume nothing
89     globalFile = .FALSE.
90     fileIsOpen = .FALSE.
91     IL=ILNBLNK( fName )
92    
93     C Assign a free unit number as the I/O channel for this routine
94     call MDSFINDUNIT( dUnit, mythid )
95    
96     C Check first for global file with simple name (ie. fName)
97     dataFName = fName
98     inquire( file=dataFname, exist=exst )
99     if (exst) then
100     write(msgbuf,'(a,a)')
101 jmc 1.2 & ' MDS_READTILE: opening global file: ',dataFName(1:IL)
102 adcroft 1.1 call print_message( msgbuf, standardmessageunit,
103     & SQUEEZE_RIGHT , mythid)
104     globalFile = .TRUE.
105     endif
106    
107     C If negative check for global file with MDS name (ie. fName.data)
108     if (.NOT. globalFile) then
109 jmc 1.2 write(dataFname,'(2a)') fName(1:IL),'.data'
110 adcroft 1.1 inquire( file=dataFname, exist=exst )
111     if (exst) then
112     write(msgbuf,'(a,a)')
113 jmc 1.2 & ' MDS_READTILE: opening global file: ',dataFName(1:IL+5)
114 adcroft 1.1 call print_message( msgbuf, standardmessageunit,
115     & SQUEEZE_RIGHT , mythid)
116     globalFile = .TRUE.
117     endif
118     endif
119    
120     C If we are reading from a global file then we open it here
121     if (globalFile) then
122     length_of_rec=MDS_RECLEN( filePrec, sNx, mythid )
123     open( dUnit, file=dataFName, status='old',
124     & access='direct', recl=length_of_rec )
125     fileIsOpen=.TRUE.
126     endif
127    
128     C Loop over all tiles
129     c do bj=1,nSy
130     c do bi=1,nSx
131    
132     C If we are reading from a tiled MDS file then we open each one here
133     if (.NOT. globalFile) then
134     iG=bi+(myXGlobalLo-1)/sNx ! Kludge until unstructered tiles
135     jG=bj+(myYGlobalLo-1)/sNy ! Kludge until unstructered tiles
136 jmc 1.2 write(dataFname,'(2a,i3.3,a,i3.3,a)')
137 adcroft 1.1 & fName(1:IL),'.',iG,'.',jG,'.data'
138     inquire( file=dataFname, exist=exst )
139     C Of course, we only open the file if the tile is "active"
140     C (This is a place-holder for the active/passive mechanism
141     if (exst) then
142     write(msgbuf,'(a,a)')
143 jmc 1.2 & ' MDS_READTILE: opening file: ',dataFName(1:IL+13)
144 adcroft 1.1 call print_message( msgbuf, standardmessageunit,
145     & SQUEEZE_RIGHT , mythid)
146     length_of_rec=MDS_RECLEN( filePrec, sNx, mythid )
147     open( dUnit, file=dataFName, status='old',
148     & access='direct', recl=length_of_rec )
149     fileIsOpen=.TRUE.
150     else
151     fileIsOpen=.FALSE.
152     write(msgbuf,'(a,a)')
153 jmc 1.2 & ' MDS_READTILE: filename: ',dataFName(1:IL+13)
154 adcroft 1.1 call print_message( msgbuf, standardmessageunit,
155     & SQUEEZE_RIGHT , mythid)
156     write(msgbuf,'(a)')
157 jmc 1.2 & ' MDS_READTILE: File does not exist'
158 adcroft 1.1 call print_error( msgbuf, mythid )
159 jmc 1.2 stop 'ABNORMAL END: S/R MDS_READTILE'
160 adcroft 1.1 endif
161     endif
162    
163     if (fileIsOpen) then
164     do k=1,nNz
165     do j=1,sNy
166     if (globalFile) then
167     iG = myXGlobalLo-1 + (bi-1)*sNx
168     jG = myYGlobalLo-1 + (bj-1)*sNy
169     irec=1 + INT(iG/sNx) + nSx*nPx*(jG+j-1) + nSx*nPx*Ny*(k-1)
170     & + nSx*nPx*Ny*nNz*(irecord-1)
171     else
172     iG = 0
173     jG = 0
174     irec=j + sNy*(k-1) + sNy*nNz*(irecord-1)
175     endif
176     if (filePrec .eq. precFloat32) then
177     read(dUnit,rec=irec) r4seg
178     #ifdef _BYTESWAPIO
179     call MDS_BYTESWAPR4( sNx, r4seg )
180     #endif
181     if (arrType .eq. 'RS') then
182     call MDS_SEG4toRS( j,bi,bj,k,nNz, r4seg, .TRUE., arr )
183     elseif (arrType .eq. 'RL') then
184     call MDS_SEG4toRL( j,bi,bj,k,nNz, r4seg, .TRUE., arr )
185     else
186     write(msgbuf,'(a)')
187 jmc 1.2 & ' MDS_READTILE: illegal value for arrType'
188 adcroft 1.1 call print_error( msgbuf, mythid )
189 jmc 1.2 stop 'ABNORMAL END: S/R MDS_READTILE'
190 adcroft 1.1 endif
191     elseif (filePrec .eq. precFloat64) then
192     read(dUnit,rec=irec) r8seg
193     #ifdef _BYTESWAPIO
194     call MDS_BYTESWAPR8( sNx, r8seg )
195     #endif
196     if (arrType .eq. 'RS') then
197     call MDS_SEG8toRS( j,bi,bj,k,nNz, r8seg, .TRUE., arr )
198     elseif (arrType .eq. 'RL') then
199     call MDS_SEG8toRL( j,bi,bj,k,nNz, r8seg, .TRUE., arr )
200     else
201     write(msgbuf,'(a)')
202 jmc 1.2 & ' MDS_READTILE: illegal value for arrType'
203 adcroft 1.1 call print_error( msgbuf, mythid )
204 jmc 1.2 stop 'ABNORMAL END: S/R MDS_READTILE'
205 adcroft 1.1 endif
206     else
207     write(msgbuf,'(a)')
208 jmc 1.2 & ' MDS_READTILE: illegal value for filePrec'
209 adcroft 1.1 call print_error( msgbuf, mythid )
210 jmc 1.2 stop 'ABNORMAL END: S/R MDS_READTILE'
211 adcroft 1.1 endif
212     C End of j loop
213     enddo
214     C End of k loop
215     enddo
216     if (.NOT. globalFile) then
217     close( dUnit )
218     fileIsOpen = .FALSE.
219     endif
220     endif
221    
222     C End of bi,bj loops
223     c enddo
224     c enddo
225    
226     C If global file was opened then close it
227     if (fileIsOpen .AND. globalFile) then
228     close( dUnit )
229     fileIsOpen = .FALSE.
230     endif
231    
232     _END_MASTER( myThid )
233    
234     C ------------------------------------------------------------------
235     return
236     end

  ViewVC Help
Powered by ViewVC 1.1.22