/[MITgcm]/MITgcm/model/src/ini_curvilinear_grid.F
ViewVC logotype

Contents of /MITgcm/model/src/ini_curvilinear_grid.F

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


Revision 1.28 - (show annotations) (download)
Thu Jul 20 23:11:48 2006 UTC (17 years, 10 months ago) by jmc
Branch: MAIN
Changes since 1.27: +179 -226 lines
Apply the correct EXCH to dxF,dyF ;
 also change Upper/lower case notation to match "GRID.h" definition.

1 C $Header: /u/gcmpack/MITgcm/model/src/ini_curvilinear_grid.F,v 1.27 2006/07/13 02:59:19 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: INI_CURVILINEAR_GRID
9 C !INTERFACE:
10 SUBROUTINE INI_CURVILINEAR_GRID( myThid )
11 C !DESCRIPTION: \bv
12 C *==========================================================*
13 C | SUBROUTINE INI_CURVILINEAR_GRID
14 C | o Initialise curvilinear coordinate system
15 C *==========================================================*
16 C | Curvilinear grid settings are read from a file rather
17 C | than coded in-line as for cartesian and spherical polar.
18 C | This is more general but you have to create the grid
19 C | yourself.
20 C *==========================================================*
21 C \ev
22
23 C !USES:
24 IMPLICIT NONE
25 C === Global variables ===
26 #include "SIZE.h"
27 #include "EEPARAMS.h"
28 #include "PARAMS.h"
29 #include "GRID.h"
30 #ifdef ALLOW_EXCH2
31 #include "W2_EXCH2_TOPOLOGY.h"
32 #include "W2_EXCH2_PARAMS.h"
33 #endif
34 #ifdef ALLOW_MNC
35 #include "MNC_PARAMS.h"
36 #endif
37
38 #ifndef ALLOW_EXCH2
39 C- note: default is to use "new" grid files (OLD_GRID_IO undef) with EXCH2
40 C but can still use (on 1 cpu) OLD_GRID_IO and EXCH2 independently
41 #ifdef ALLOW_MDSIO
42 #define OLD_GRID_IO
43 #endif
44 #endif /* ALLOW_EXCH2 */
45
46 C !INPUT/OUTPUT PARAMETERS:
47 C == Routine arguments ==
48 C myThid - Number of this instance of INI_CURVILINEAR_GRID
49 INTEGER myThid
50
51 C !LOCAL VARIABLES:
52 C == Local variables ==
53 INTEGER bi,bj, myIter
54 INTEGER I,J
55 CHARACTER*(MAX_LEN_MBUF) msgBuf
56 LOGICAL anglesAreSet
57 #ifdef ALLOW_MNC
58 CHARACTER*(80) mncFn
59 #endif
60 #ifndef OLD_GRID_IO
61 # ifdef ALLOW_EXCH2
62 _RL buf(sNx*nSx*nPx+1)
63 INTEGER myTile
64 # else
65 _RL buf(sNx+1,sNy+1)
66 # endif
67 INTEGER iG, iL, iLen
68 CHARACTER*(MAX_LEN_FNAM) fName
69 CHARACTER*(MAX_LEN_MBUF) tmpBuf
70 INTEGER ILNBLNK
71 EXTERNAL ILNBLNK
72 #endif
73 CEOP
74
75 C-- Set everything to zero everywhere
76 DO bj = myByLo(myThid), myByHi(myThid)
77 DO bi = myBxLo(myThid), myBxHi(myThid)
78
79 DO J=1-Oly,sNy+Oly
80 DO I=1-Olx,sNx+Olx
81 xC(i,j,bi,bj)=0.
82 yC(i,j,bi,bj)=0.
83 xG(i,j,bi,bj)=0.
84 yG(i,j,bi,bj)=0.
85 dxC(i,j,bi,bj)=0.
86 dyC(i,j,bi,bj)=0.
87 dxG(i,j,bi,bj)=0.
88 dyG(i,j,bi,bj)=0.
89 dxF(i,j,bi,bj)=0.
90 dyF(i,j,bi,bj)=0.
91 dxV(i,j,bi,bj)=0.
92 dyU(i,j,bi,bj)=0.
93 rA(i,j,bi,bj)=0.
94 rAz(i,j,bi,bj)=0.
95 rAw(i,j,bi,bj)=0.
96 rAs(i,j,bi,bj)=0.
97 tanPhiAtU(i,j,bi,bj)=0.
98 tanPhiAtV(i,j,bi,bj)=0.
99 angleCosC(i,j,bi,bj)=1.
100 angleSinC(i,j,bi,bj)=0.
101 cosFacU(J,bi,bj)=1.
102 cosFacV(J,bi,bj)=1.
103 sqCosFacU(J,bi,bj)=1.
104 sqCosFacV(J,bi,bj)=1.
105 ENDDO
106 ENDDO
107
108 ENDDO
109 ENDDO
110
111
112 #ifdef ALLOW_MNC
113 IF (useMNC .AND. readgrid_mnc) THEN
114
115 _BEGIN_MASTER(myThid)
116 DO i = 1,80
117 mncFn(i:i) = ' '
118 ENDDO
119 write(mncFn,'(a)') 'mitgrid'
120 DO i = 1,MAX_LEN_MBUF
121 msgBuf(i:i) = ' '
122 ENDDO
123 WRITE(msgBuf,'(2A)') msgBuf,' ; Reading grid info using MNC'
124 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
125 & SQUEEZE_RIGHT , myThid)
126 CALL MNC_FILE_CLOSE_ALL_MATCHING(mncFn, myThid)
127 CALL MNC_CW_SET_UDIM(mncFn, 1, myThid)
128 CALL MNC_CW_SET_CITER(mncFn, 2, -1, -1, -1, myThid)
129 CALL MNC_CW_SET_UDIM(mncFn, 1, myThid)
130 CALL MNC_CW_RS_R('D',mncFn,0,0,'XC', xC, myThid)
131 CALL MNC_CW_RS_R('D',mncFn,0,0,'XG', xG, myThid)
132 CALL MNC_CW_RS_R('D',mncFn,0,0,'YC', yC, myThid)
133 CALL MNC_CW_RS_R('D',mncFn,0,0,'YG', yG, myThid)
134 CALL MNC_CW_RS_R('D',mncFn,0,0,'dxC',dxC, myThid)
135 CALL MNC_CW_RS_R('D',mncFn,0,0,'dyC',dyC, myThid)
136 CALL MNC_CW_RS_R('D',mncFn,0,0,'dxF',dxF, myThid)
137 CALL MNC_CW_RS_R('D',mncFn,0,0,'dyF',dyF, myThid)
138 CALL MNC_CW_RS_R('D',mncFn,0,0,'dxG',dxG, myThid)
139 CALL MNC_CW_RS_R('D',mncFn,0,0,'dyG',dyG, myThid)
140 CALL MNC_CW_RS_R('D',mncFn,0,0,'dxV',dxV, myThid)
141 CALL MNC_CW_RS_R('D',mncFn,0,0,'dyU',dyU, myThid)
142 CALL MNC_CW_RS_R('D',mncFn,0,0,'rA', rA, myThid)
143 CALL MNC_CW_RS_R('D',mncFn,0,0,'rAz',rAz, myThid)
144 CALL MNC_CW_RS_R('D',mncFn,0,0,'rAw',rAw, myThid)
145 CALL MNC_CW_RS_R('D',mncFn,0,0,'rAs',rAs, myThid)
146 CALL MNC_CW_RS_R('D',mncFn,0,0,'AngleCS',angleCosC,myThid)
147 CALL MNC_CW_RS_R('D',mncFn,0,0,'AngleSN',angleSinC,myThid)
148 anglesAreSet = .TRUE.
149
150 _END_MASTER(myThid)
151
152 CALL EXCH_XY_RS(xC,myThid)
153 CALL EXCH_XY_RS(yC,myThid)
154 CALL EXCH_UV_AGRID_XY_RS( dxF, dyF, .FALSE., myThid )
155 CALL EXCH_XY_RS(rA,myThid )
156 CALL EXCH_Z_XY_RS(xG,myThid)
157 CALL EXCH_Z_XY_RS(yG,myThid)
158 CALL EXCH_Z_XY_RS(rAz,myThid)
159 CALL EXCH_UV_XY_RS(dxC,dyC,.FALSE.,myThid)
160 CALL EXCH_UV_XY_RS(rAw,rAs,.FALSE.,myThid)
161 CALL EXCH_UV_XY_RS(dyG,dxG,.FALSE.,myThid)
162 CALL EXCH_UV_AGRID_XY_RS(angleSinC,angleCosC,.TRUE.,myThid)
163
164 ELSE
165 #endif
166
167 C Here we make no assumptions about grid symmetry and simply
168 C read the raw grid data from files
169
170 #ifdef OLD_GRID_IO
171
172 C- Cell centered quantities
173 CALL MDSREADFIELD('LONC.bin',readBinaryPrec,'RS',1,xC, 1,myThid)
174 CALL MDSREADFIELD('LATC.bin',readBinaryPrec,'RS',1,yC, 1,myThid)
175 _EXCH_XY_R4(xC,myThid)
176 _EXCH_XY_R4(yC,myThid)
177
178 CALL MDSREADFIELD('DXF.bin',readBinaryPrec,'RS',1,dxF, 1,myThid)
179 CALL MDSREADFIELD('DYF.bin',readBinaryPrec,'RS',1,dyF, 1,myThid)
180 CALL EXCH_UV_AGRID_XY_RS( dxF, dyF, .FALSE., myThid )
181
182 CALL MDSREADFIELD('RA.bin',readBinaryPrec,'RS',1,rA, 1,myThid)
183 _EXCH_XY_R4(rA,myThid )
184
185 C- Corner quantities
186 CALL MDSREADFIELD('LONG.bin',readBinaryPrec,'RS',1,xG, 1,myThid)
187 CALL MDSREADFIELD('LATG.bin',readBinaryPrec,'RS',1,yG, 1,myThid)
188 IF (useCubedSphereExchange) THEN
189 cs- this block needed by cubed sphere until we write more useful I/O routines
190 bi=3
191 bj=1
192 yG(1,sNy+1,bj,1)=yG(1,1,bi,1)
193 bj=bj+2
194 yG(1,sNy+1,bj,1)=yG(1,1,bi,1)
195 bj=bj+2
196 yG(1,sNy+1,bj,1)=yG(1,1,bi,1)
197 bi=6
198 bj=2
199 yG(sNx+1,1,bj,1)=yG(1,1,bi,1)
200 bj=bj+2
201 yG(sNx+1,1,bj,1)=yG(1,1,bi,1)
202 bj=bj+2
203 yG(sNx+1,1,bj,1)=yG(1,1,bi,1)
204 cs- end block
205 ENDIF
206 CALL EXCH_Z_XY_RS(xG,myThid)
207 CALL EXCH_Z_XY_RS(yG,myThid)
208
209 CALL MDSREADFIELD('DXV.bin',readBinaryPrec,'RS',1,dxV, 1,myThid)
210 CALL MDSREADFIELD('DYU.bin',readBinaryPrec,'RS',1,dyU, 1,myThid)
211 cs- this block needed by cubed sphere until we write more useful I/O routines
212 C !!! _EXCH_ZUV_XY_R4(dxV, dyU, unSigned, myThid)
213 cs! this is not correct <= need paired exchange for dxv,dyu
214 IF (.NOT.useCubedSphereExchange) THEN
215 CALL EXCH_Z_XY_RS(dxV,myThid)
216 CALL EXCH_Z_XY_RS(dyU,myThid)
217 ELSE
218 DO bj = myByLo(myThid), myByHi(myThid)
219 DO bi = myBxLo(myThid), myBxHi(myThid)
220 cs! fix overlaps:
221 DO j=1,sNy
222 DO i=1,Olx
223 dxV(1-i,j,bi,bj)=dxV(1+i,j,bi,bj)
224 dxV(sNx+i,j,bi,bj)=dxV(i,j,bi,bj)
225 dyU(1-i,j,bi,bj)=dyU(1+i,j,bi,bj)
226 dyU(sNx+i,j,bi,bj)=dyU(i,j,bi,bj)
227 ENDDO
228 ENDDO
229 DO j=1,Oly
230 DO i=1-Olx,sNx+Olx
231 dxV(i,1-j,bi,bj)=dxV(i,1+j,bi,bj)
232 dxV(i,sNy+j,bi,bj)=dxV(i,j,bi,bj)
233 dyU(i,1-j,bi,bj)=dyU(i,1+j,bi,bj)
234 dyU(i,sNy+j,bi,bj)=dyU(i,j,bi,bj)
235 ENDDO
236 ENDDO
237 ENDDO
238 ENDDO
239 cs- end block
240 ENDIF
241
242 CALL MDSREADFIELD('RAZ.bin',readBinaryPrec,'RS',1,rAz, 1,myThid)
243 IF (useCubedSphereExchange) THEN
244 cs- this block needed by cubed sphere until we write more useful I/O routines
245 CALL EXCH_Z_XY_RS(rAz , myThid )
246 DO bj = myByLo(myThid), myByHi(myThid)
247 DO bi = myBxLo(myThid), myBxHi(myThid)
248 rAz(sNx+1,1,bi,bj)=rAz(1,1,bi,bj)
249 rAz(1,sNy+1,bi,bj)=rAz(1,1,bi,bj)
250 ENDDO
251 ENDDO
252 cs- end block
253 ENDIF
254 CALL EXCH_Z_XY_RS(rAz,myThid)
255
256 C- Staggered (u,v pairs) quantities
257 CALL MDSREADFIELD('DXC.bin',readBinaryPrec,'RS',1,dxC, 1,myThid)
258 CALL MDSREADFIELD('DYC.bin',readBinaryPrec,'RS',1,dyC, 1,myThid)
259 CALL EXCH_UV_XY_RS(dxC,dyC,.FALSE.,myThid)
260
261 CALL MDSREADFIELD('RAW.bin',readBinaryPrec,'RS',1,rAw, 1,myThid)
262 CALL MDSREADFIELD('RAS.bin',readBinaryPrec,'RS',1,rAs, 1,myThid)
263 IF (useCubedSphereExchange) THEN
264 cs- this block needed by cubed sphere until we write more useful I/O routines
265 DO bj = myByLo(myThid), myByHi(myThid)
266 DO bi = myBxLo(myThid), myBxHi(myThid)
267 DO J = 1,sNy
268 c rAw(sNx+1,J,bi,bj)=rAw(1,J,bi,bj)
269 c rAs(J,sNy+1,bi,bj)=rAs(J,1,bi,bj)
270 ENDDO
271 ENDDO
272 ENDDO
273 cs- end block
274 ENDIF
275 CALL EXCH_UV_XY_RS(rAw,rAs,.FALSE.,myThid)
276
277 CALL MDSREADFIELD('DXG.bin',readBinaryPrec,'RS',1,dxG, 1,myThid)
278 CALL MDSREADFIELD('DYG.bin',readBinaryPrec,'RS',1,dyG, 1,myThid)
279 CALL EXCH_UV_XY_RS(dyG,dxG,.FALSE.,myThid)
280 CALL EXCH_UV_AGRID_XY_RS(angleSinC,angleCosC,.TRUE.,myThid)
281 anglesAreSet = .FALSE.
282
283 c write(10) xC
284 c write(10) yC
285 c write(10) dxF
286 c write(10) dyF
287 c write(10) rA
288 c write(10) xG
289 c write(10) yG
290 c write(10) dxV
291 c write(10) dyU
292 c write(10) rAz
293 c write(10) dxC
294 c write(10) dyC
295 c write(10) rAw
296 c write(10) rAs
297 c write(10) dxG
298 c write(10) dyG
299
300 #else /* ifndef OLD_GRID_IO */
301
302 C-- Only do I/O if I am the master thread
303 _BEGIN_MASTER(myThid)
304
305 DO bj = 1,nSy
306 DO bi = 1,nSx
307 iG=bi+(myXGlobalLo-1)/sNx
308 WRITE(tmpBuf,'(A,I4)') 'tile:',iG
309 #ifdef ALLOW_EXCH2
310 myTile = W2_myTileList(bi)
311 WRITE(tmpBuf,'(A,I4)') 'tile:',myTile
312 iG = exch2_myface(myTile)
313 #endif
314 iLen = ILNBLNK(horizGridFile)
315 IF ( iLen .EQ. 0 ) THEN
316 WRITE(fName,'("tile",I3.3,".mitgrid")') iG
317 ELSE
318 WRITE(fName,'(2A,I3.3,A)') horizGridFile(1:iLen),
319 & '.face',iG,'.bin'
320 ENDIF
321 iLen = ILNBLNK(fName)
322 iL = ILNBLNK(tmpBuf)
323 WRITE(msgBuf,'(3A)') tmpBuf(1:iL),
324 & ' ; Read from file ',fName(1:iLen)
325 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
326 & SQUEEZE_RIGHT , myThid)
327 WRITE(msgBuf,'(A)') ' =>'
328
329 CALL READSYMTILE_RS(fName,1,xC,bi,bj,buf,myThid)
330 iL = ILNBLNK(msgBuf)
331 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'xC'
332 CALL READSYMTILE_RS(fName,2,yC,bi,bj,buf,myThid)
333 iL = ILNBLNK(tmpBuf)
334 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'yC'
335 CALL READSYMTILE_RS(fName,3,dxF,bi,bj,buf,myThid)
336 iL = ILNBLNK(msgBuf)
337 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'dxF'
338 CALL READSYMTILE_RS(fName,4,dyF,bi,bj,buf,myThid)
339 iL = ILNBLNK(tmpBuf)
340 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'dyF'
341 CALL READSYMTILE_RS(fName,5,rA,bi,bj,buf,myThid)
342 iL = ILNBLNK(msgBuf)
343 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'rA'
344 CALL READSYMTILE_RS(fName,6,xG,bi,bj,buf,myThid)
345 iL = ILNBLNK(tmpBuf)
346 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'xG'
347 CALL READSYMTILE_RS(fName,7,yG,bi,bj,buf,myThid)
348 iL = ILNBLNK(msgBuf)
349 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'yG'
350 CALL READSYMTILE_RS(fName,8,dxV,bi,bj,buf,myThid)
351 iL = ILNBLNK(tmpBuf)
352 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'dxV'
353 CALL READSYMTILE_RS(fName,9,dyU,bi,bj,buf,myThid)
354 iL = ILNBLNK(msgBuf)
355 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'dyU'
356 CALL READSYMTILE_RS(fName,10,rAz,bi,bj,buf,myThid)
357 iL = ILNBLNK(tmpBuf)
358 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'rAz'
359 CALL READSYMTILE_RS(fName,11,dxC,bi,bj,buf,myThid)
360 iL = ILNBLNK(msgBuf)
361 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'dxC'
362 CALL READSYMTILE_RS(fName,12,dyC,bi,bj,buf,myThid)
363 iL = ILNBLNK(tmpBuf)
364 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'dyC'
365 CALL READSYMTILE_RS(fName,13,rAw,bi,bj,buf,myThid)
366 iL = ILNBLNK(msgBuf)
367 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'rAw'
368 CALL READSYMTILE_RS(fName,14,rAs,bi,bj,buf,myThid)
369 iL = ILNBLNK(tmpBuf)
370 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'rAs'
371 CALL READSYMTILE_RS(fName,15,dxG,bi,bj,buf,myThid)
372 iL = ILNBLNK(msgBuf)
373 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'dxG'
374 CALL READSYMTILE_RS(fName,16,dyG,bi,bj,buf,myThid)
375 iL = ILNBLNK(tmpBuf)
376 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'dyG'
377
378 iLen = ILNBLNK(horizGridFile)
379 IF ( iLen.GT.0 ) THEN
380 CALL READSYMTILE_RS(fName,17,angleCosC,bi,bj,buf,myThid)
381 iL = ILNBLNK(msgBuf)
382 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'AngleCS'
383 CALL READSYMTILE_RS(fName,18,angleSinC,bi,bj,buf,myThid)
384 iL = ILNBLNK(tmpBuf)
385 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'AngleSN'
386 anglesAreSet = .TRUE.
387 ELSE
388 anglesAreSet = .FALSE.
389 ENDIF
390
391 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
392 & SQUEEZE_RIGHT , myThid)
393
394 ENDDO
395 ENDDO
396
397 _END_MASTER(myThid)
398
399 CALL EXCH_XY_RS(xC,myThid)
400 CALL EXCH_XY_RS(yC,myThid)
401 CALL EXCH_UV_AGRID_XY_RS( dxF, dyF, .FALSE., myThid )
402 CALL EXCH_XY_RS(rA,myThid )
403 CALL EXCH_Z_XY_RS(xG,myThid)
404 CALL EXCH_Z_XY_RS(yG,myThid)
405 C !!! _EXCH_ZUV_XY_R4(dxV, dyU, unSigned, myThid)
406 c CALL EXCH_Z_XY_RS(dxV,myThid)
407 c CALL EXCH_Z_XY_RS(dyU,myThid)
408 CALL EXCH_Z_XY_RS(rAz,myThid)
409 CALL EXCH_UV_XY_RS(dxC,dyC,.FALSE.,myThid)
410 CALL EXCH_UV_XY_RS(rAw,rAs,.FALSE.,myThid)
411 CALL EXCH_UV_XY_RS(dyG,dxG,.FALSE.,myThid)
412 CALL EXCH_UV_AGRID_XY_RS(angleSinC,angleCosC,.TRUE.,myThid)
413
414 #endif /* OLD_GRID_IO */
415
416 #ifdef ALLOW_MNC
417 ENDIF
418 #endif /* ALLOW_MNC */
419
420 C-- Stop if Angle have not been loaded but are needed :
421 _BEGIN_MASTER(myThid)
422 IF ( .NOT.anglesAreSet .AND. use3dCoriolis ) THEN
423 WRITE(msgBuf,'(2A)')
424 & 'INI_CURVILINEAR_GRID: Angle of CurvilinearGrid not set',
425 & ' but needed for 3-D Coriolis'
426 CALL PRINT_ERROR( msgBuf , myThid)
427 STOP 'ABNORMAL END: S/R INI_CURVILINEAR_GRID'
428 ENDIF
429 _END_MASTER(myThid)
430
431 c CALL WRITE_FULLARRAY_RL('dxV',dxV,1,0,0,0,myThid)
432 c CALL WRITE_FULLARRAY_RL('dyU',dyU,1,0,0,0,myThid)
433 c CALL WRITE_FULLARRAY_RL('rAz',rAz,1,0,0,0,myThid)
434 c CALL WRITE_FULLARRAY_RL('xG',xG,1,0,0,0,myThid)
435 c CALL WRITE_FULLARRAY_RL('yG',yG,1,0,0,0,myThid)
436
437 C-- Now let's look at all these beasts
438 IF ( debugLevel .GE. debLevB ) THEN
439 myIter = 1
440 CALL PLOT_FIELD_XYRL( xC , 'Current xC ' ,
441 & myIter, myThid )
442 CALL PLOT_FIELD_XYRL( yC , 'Current yC ' ,
443 & myIter, myThid )
444 CALL PLOT_FIELD_XYRL( dxF , 'Current dxF ' ,
445 & myIter, myThid )
446 CALL PLOT_FIELD_XYRL( XC , 'Current XC ' ,
447 & myIter, myThid )
448 CALL PLOT_FIELD_XYRL( dyF , 'Current dyF ' ,
449 & myIter, myThid )
450 CALL PLOT_FIELD_XYRL( rA , 'Current rA ' ,
451 & myIter, myThid )
452 CALL PLOT_FIELD_XYRL( xG , 'Current xG ' ,
453 & myIter, myThid )
454 CALL PLOT_FIELD_XYRL( yG , 'Current yG ' ,
455 & myIter, myThid )
456 CALL PLOT_FIELD_XYRL( dxV , 'Current dxV ' ,
457 & myIter, myThid )
458 CALL PLOT_FIELD_XYRL( dyU , 'Current dyU ' ,
459 & myIter, myThid )
460 CALL PLOT_FIELD_XYRL( rAz , 'Current rAz ' ,
461 & myIter, myThid )
462 CALL PLOT_FIELD_XYRL( dxC , 'Current dxC ' ,
463 & myIter, myThid )
464 CALL PLOT_FIELD_XYRL( dyC , 'Current dyC ' ,
465 & myIter, myThid )
466 CALL PLOT_FIELD_XYRL( rAw , 'Current rAw ' ,
467 & myIter, myThid )
468 CALL PLOT_FIELD_XYRL( rAs , 'Current rAs ' ,
469 & myIter, myThid )
470 CALL PLOT_FIELD_XYRL( dxG , 'Current dxG ' ,
471 & myIter, myThid )
472 CALL PLOT_FIELD_XYRL( dyG , 'Current dyG ' ,
473 & myIter, myThid )
474 CALL PLOT_FIELD_XYRL(angleCosC, 'Current AngleCS ' ,
475 & myIter, myThid )
476 CALL PLOT_FIELD_XYRL(angleSinC, 'Current AngleSN ' ,
477 & myIter, myThid )
478 ENDIF
479
480 RETURN
481 END
482
483 C --------------------------------------------------------------------------
484
485 SUBROUTINE READSYMTILE_RS(fName,irec,array,bi,bj,buf,myThid)
486 C /==========================================================\
487 C | SUBROUTINE READSYMTILE_RS |
488 C |==========================================================|
489 C \==========================================================/
490 IMPLICIT NONE
491
492 C === Global variables ===
493 #include "SIZE.h"
494 #include "EEPARAMS.h"
495 #ifdef ALLOW_EXCH2
496 #include "W2_EXCH2_TOPOLOGY.h"
497 #include "W2_EXCH2_PARAMS.h"
498 #endif /* ALLOW_EXCH2 */
499
500 C == Routine arguments ==
501 CHARACTER*(*) fName
502 INTEGER irec
503 _RS array(1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)
504 INTEGER bi,bj,myThid
505 #ifdef ALLOW_EXCH2
506 _RL buf(1:sNx*nSx*nPx+1)
507 #else
508 _RL buf(1:sNx+1,1:sNy+1)
509 #endif /* ALLOW_EXCH2 */
510
511 C == Local variables ==
512 INTEGER I,J,dUnit, iLen
513 INTEGER length_of_rec
514 INTEGER MDS_RECLEN
515 #ifdef ALLOW_EXCH2
516 INTEGER TN, dNx, dNy, TBX, TBY, TNX, TNY, II, iBase
517 #endif
518 INTEGER ILNBLNK
519 EXTERNAL ILNBLNK
520
521 iLen = ILNBLNK(fName)
522 #ifdef ALLOW_EXCH2
523 C Figure out offset of tile within face
524 TN = W2_myTileList(bi)
525 dNx = exch2_mydnx(TN)
526 dNy = exch2_mydny(TN)
527 TBX = exch2_tbasex(TN)
528 TBY = exch2_tbasey(TN)
529 TNX = exch2_tnx(TN)
530 TNY = exch2_tny(TN)
531
532 CALL MDSFINDUNIT( dUnit, myThid )
533 length_of_rec=MDS_RECLEN( 64, (dNx+1), myThid )
534 OPEN( dUnit, file=fName(1:iLen), status='old',
535 & access='direct', recl=length_of_rec )
536 J=0
537 iBase=(irec-1)*(dny+1)
538 DO I=1+TBY,sNy+1+TBY
539 READ(dUnit,rec=I+iBase)(buf(ii),ii=1,dNx+1)
540 #ifdef _BYTESWAPIO
541 #ifdef REAL4_IS_SLOW
542 CALL MDS_BYTESWAPR8((dNx+1), buf)
543 #else
544 CALL MDS_BYTESWAPR4((dNx+1), buf)
545 #endif
546 #endif
547 J=J+1
548 DO II=1,sNx+1
549 array(II,J,bi,bj)=buf(II+TBX)
550 ENDDO
551 ENDDO
552 CLOSE( dUnit )
553
554 #else /* ALLOW_EXCH2 */
555
556 CALL MDSFINDUNIT( dUnit, myThid )
557 length_of_rec=MDS_RECLEN( 64, (sNx+1)*(sNy+1), myThid )
558 OPEN( dUnit, file=fName(1:iLen), status='old',
559 & access='direct', recl=length_of_rec )
560 READ(dUnit,rec=irec) buf
561 CLOSE( dUnit )
562
563 #ifdef _BYTESWAPIO
564 #ifdef REAL4_IS_SLOW
565 CALL MDS_BYTESWAPR8((sNx+1)*(sNy+1), buf)
566 #else
567 CALL MDS_BYTESWAPR4((sNx+1)*(sNy+1), buf)
568 #endif
569 #endif
570
571 DO J=1,sNy+1
572 DO I=1,sNx+1
573 array(I,J,bi,bj)=buf(I,J)
574 ENDDO
575 ENDDO
576 c write(0,*) irec,buf(1,1),array(1,1,1,1)
577
578 #endif /* ALLOW_EXCH2 */
579
580 RETURN
581 END

  ViewVC Help
Powered by ViewVC 1.1.22