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

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

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


Revision 1.18 - (hide annotations) (download)
Mon Feb 7 18:37:19 2005 UTC (19 years, 3 months ago) by edhill
Branch: MAIN
Changes since 1.17: +65 -1 lines
 o add a "readgrid_mnc" flag to MNC and give model/src/ini_curvilinear_grid.F
   the ability (off by default) to read the grid information using MNC

1 edhill 1.18 C $Header: /u/gcmpack/MITgcm/model/src/ini_curvilinear_grid.F,v 1.17 2004/09/23 21:27:04 jmc Exp $
2 cnh 1.3 C $Name: $
3 adcroft 1.2
4 edhill 1.11 #include "PACKAGES_CONFIG.h"
5 adcroft 1.2 #include "CPP_OPTIONS.h"
6    
7 cnh 1.3 CBOP
8     C !ROUTINE: INI_CURVILINEAR_GRID
9     C !INTERFACE:
10 adcroft 1.2 SUBROUTINE INI_CURVILINEAR_GRID( myThid )
11 cnh 1.3 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 adcroft 1.2 IMPLICIT NONE
25     C === Global variables ===
26     #include "SIZE.h"
27     #include "EEPARAMS.h"
28     #include "PARAMS.h"
29     #include "GRID.h"
30 adcroft 1.10 #ifdef ALLOW_EXCH2
31 jmc 1.7 #include "W2_EXCH2_TOPOLOGY.h"
32     #include "W2_EXCH2_PARAMS.h"
33     #endif
34 edhill 1.18 #ifdef ALLOW_MNC
35     #include "MNC_PARAMS.h"
36     #endif
37 jmc 1.7
38 adcroft 1.10 #ifndef ALLOW_EXCH2
39 jmc 1.7 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     #define OLD_GRID_IO
42 adcroft 1.10 #endif /* ALLOW_EXCH2 */
43 adcroft 1.2
44 cnh 1.3 C !INPUT/OUTPUT PARAMETERS:
45 adcroft 1.2 C == Routine arguments ==
46     C myThid - Number of this instance of INI_CARTESIAN_GRID
47     INTEGER myThid
48    
49 cnh 1.3 C !LOCAL VARIABLES:
50 adcroft 1.2 C == Local variables ==
51 dimitri 1.14 INTEGER bi,bj, myTile, myiter
52 adcroft 1.2 INTEGER I,J
53 jmc 1.7 CHARACTER*(15) fName
54 edhill 1.18 #ifdef ALLOW_MNC
55     CHARACTER*(80) mncFn
56     #endif
57 jmc 1.7 _RL buf(sNx+1,sNy+1)
58 jmc 1.8 INTEGER iG, iL
59     CHARACTER*(MAX_LEN_MBUF) msgBuf
60     INTEGER ILNBLNK
61     EXTERNAL ILNBLNK
62 cnh 1.3 CEOP
63 adcroft 1.2
64     C-- Set everything to zero everywhere
65     DO bj = myByLo(myThid), myByHi(myThid)
66     DO bi = myBxLo(myThid), myBxHi(myThid)
67    
68     DO J=1-Oly,sNy+Oly
69     DO I=1-Olx,sNx+Olx
70     XC(i,j,bi,bj)=0.
71     YC(i,j,bi,bj)=0.
72     XG(i,j,bi,bj)=0.
73     YG(i,j,bi,bj)=0.
74     DXC(i,j,bi,bj)=0.
75     DYC(i,j,bi,bj)=0.
76     DXG(i,j,bi,bj)=0.
77     DYG(i,j,bi,bj)=0.
78     DXF(i,j,bi,bj)=0.
79     DYF(i,j,bi,bj)=0.
80     DXV(i,j,bi,bj)=0.
81     DYU(i,j,bi,bj)=0.
82     RA(i,j,bi,bj)=0.
83     RAZ(i,j,bi,bj)=0.
84     RAW(i,j,bi,bj)=0.
85     RAS(i,j,bi,bj)=0.
86     tanPhiAtU(i,j,bi,bj)=0.
87     tanPhiAtV(i,j,bi,bj)=0.
88     cosFacU(J,bi,bj)=1.
89     cosFacV(J,bi,bj)=1.
90     sqcosFacU(J,bi,bj)=1.
91     sqcosFacV(J,bi,bj)=1.
92     ENDDO
93     ENDDO
94    
95 jmc 1.7 ENDDO
96     ENDDO
97 adcroft 1.2
98 edhill 1.18
99     #ifdef ALLOW_MNC
100     IF (useMNC .AND. readgrid_mnc) THEN
101    
102     _BEGIN_MASTER(myThid)
103     DO i = 1,80
104     mncFn(i:i) = ' '
105     ENDDO
106     write(mncFn,'(a)') 'mitgrid'
107     DO i = 1,MAX_LEN_MBUF
108     msgBuf(i:i) = ' '
109     ENDDO
110     WRITE(msgBuf,'(2A)') msgBuf,' ; Reading grid info using MNC'
111     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
112     & SQUEEZE_RIGHT , myThid)
113     CALL MNC_FILE_CLOSE_ALL_MATCHING(mncFn, myThid)
114     CALL MNC_CW_SET_UDIM(mncFn, 1, myThid)
115     CALL MNC_CW_RS_R('R',mncFn,0,0,'XC', XC, myThid)
116     CALL MNC_CW_RS_R('R',mncFn,0,0,'XG', XG, myThid)
117     CALL MNC_CW_RS_R('R',mncFn,0,0,'YC', YC, myThid)
118     CALL MNC_CW_RS_R('R',mncFn,0,0,'YG', YG, myThid)
119     CALL MNC_CW_RS_R('R',mncFn,0,0,'dxC',DXC, myThid)
120     CALL MNC_CW_RS_R('R',mncFn,0,0,'dyC',DYC, myThid)
121     CALL MNC_CW_RS_R('R',mncFn,0,0,'dxF',DXF, myThid)
122     CALL MNC_CW_RS_R('R',mncFn,0,0,'dyF',DYF, myThid)
123     CALL MNC_CW_RS_R('R',mncFn,0,0,'dxG',DXG, myThid)
124     CALL MNC_CW_RS_R('R',mncFn,0,0,'dyG',DYG, myThid)
125     CALL MNC_CW_RS_R('R',mncFn,0,0,'dxV',DXV, myThid)
126     CALL MNC_CW_RS_R('R',mncFn,0,0,'dyU',DYU, myThid)
127     CALL MNC_CW_RS_R('R',mncFn,0,0,'rA', RA, myThid)
128     CALL MNC_CW_RS_R('R',mncFn,0,0,'rAz',RAZ, myThid)
129     CALL MNC_CW_RS_R('R',mncFn,0,0,'rAw',RAW, myThid)
130     CALL MNC_CW_RS_R('R',mncFn,0,0,'rAs',RAS, myThid)
131    
132     _END_MASTER(myThid)
133    
134     CALL EXCH_XY_RS(XC,myThid)
135     CALL EXCH_XY_RS(YC,myThid)
136     #ifdef HRCUBE
137     CALL EXCH_XY_RS(DXF,myThid)
138     CALL EXCH_XY_RS(DYF,myThid)
139     #endif
140     CALL EXCH_XY_RS(RA,myThid )
141     CALL EXCH_Z_XY_RS(XG,myThid)
142     CALL EXCH_Z_XY_RS(YG,myThid)
143     CALL EXCH_Z_XY_RS(RAZ,myThid)
144     CALL EXCH_UV_XY_RS(DXC,DYC,.FALSE.,myThid)
145     CALL EXCH_UV_XY_RS(RAW,RAS,.FALSE.,myThid)
146     CALL EXCH_UV_XY_RS(DYG,DXG,.FALSE.,myThid)
147    
148     ELSE
149     #endif
150    
151 adcroft 1.2 C Here we make no assumptions about grid symmetry and simply
152     C read the raw grid data from files
153    
154 jmc 1.7 #ifdef OLD_GRID_IO
155    
156 adcroft 1.2 C- Cell centered quantities
157 adcroft 1.4 CALL MDSREADFIELD('LONC.bin',readBinaryPrec,'RS',1,XC, 1,myThid)
158     CALL MDSREADFIELD('LATC.bin',readBinaryPrec,'RS',1,YC, 1,myThid)
159 adcroft 1.2 _EXCH_XY_R4(XC,myThid)
160     _EXCH_XY_R4(YC,myThid)
161    
162 adcroft 1.4 CALL MDSREADFIELD('DXF.bin',readBinaryPrec,'RS',1,DXF, 1,myThid)
163     CALL MDSREADFIELD('DYF.bin',readBinaryPrec,'RS',1,DYF, 1,myThid)
164 adcroft 1.2 C !!! _EXCH_OUV_XY_R4(DXF, DYF, unSigned, myThid )
165     cs! this is not correct! <= need paired exchange for DXF,DYF
166     _EXCH_XY_R4(DXF,myThid)
167     _EXCH_XY_R4(DYF,myThid)
168 dimitri 1.13 IF (useCubedSphereExchange) THEN
169 adcroft 1.5 cs! fix overlaps:
170     DO bj = myByLo(myThid), myByHi(myThid)
171     DO bi = myBxLo(myThid), myBxHi(myThid)
172     DO j=1,sNy
173     DO i=1,Olx
174     DXF(1-i,j,bi,bj)=DXF(i,j,bi,bj)
175     DXF(sNx+i,j,bi,bj)=DXF(sNx+1-i,j,bi,bj)
176     DYF(1-i,j,bi,bj)=DYF(i,j,bi,bj)
177     DYF(sNx+i,j,bi,bj)=DYF(sNx+1-i,j,bi,bj)
178     ENDDO
179     ENDDO
180     DO j=1,Oly
181     DO i=1,sNx
182     DXF(i,1-j,bi,bj)=DXF(i,j,bi,bj)
183     DXF(i,sNy+j,bi,bj)=DXF(i,sNy+1-j,bi,bj)
184     DYF(i,1-j,bi,bj)=DYF(i,j,bi,bj)
185     DYF(i,sNy+j,bi,bj)=DYF(i,sNy+1-j,bi,bj)
186     ENDDO
187     ENDDO
188     ENDDO
189     ENDDO
190 dimitri 1.13 ENDIF
191 adcroft 1.5 cs
192 adcroft 1.2
193 adcroft 1.4 CALL MDSREADFIELD('RA.bin',readBinaryPrec,'RS',1,RA, 1,myThid)
194 adcroft 1.2 _EXCH_XY_R4(RA,myThid )
195    
196     C- Corner quantities
197     C *********** this are not degbugged ************
198 adcroft 1.4 CALL MDSREADFIELD('LONG.bin',readBinaryPrec,'RS',1,XG, 1,myThid)
199     CALL MDSREADFIELD('LATG.bin',readBinaryPrec,'RS',1,YG, 1,myThid)
200 dimitri 1.13 IF (useCubedSphereExchange) THEN
201 adcroft 1.2 cs- this block needed by cubed sphere until we write more useful I/O routines
202     bi=3
203     bj=1
204     YG(1,sNy+1,bj,1)=YG(1,1,bi,1)
205     bj=bj+2
206     YG(1,sNy+1,bj,1)=YG(1,1,bi,1)
207     bj=bj+2
208     YG(1,sNy+1,bj,1)=YG(1,1,bi,1)
209     bi=6
210     bj=2
211     YG(sNx+1,1,bj,1)=YG(1,1,bi,1)
212     bj=bj+2
213     YG(sNx+1,1,bj,1)=YG(1,1,bi,1)
214     bj=bj+2
215     YG(sNx+1,1,bj,1)=YG(1,1,bi,1)
216     cs- end block
217 dimitri 1.13 ENDIF
218 adcroft 1.2 CALL EXCH_Z_XY_RS(XG,myThid)
219     CALL EXCH_Z_XY_RS(YG,myThid)
220    
221 adcroft 1.4 CALL MDSREADFIELD('DXV.bin',readBinaryPrec,'RS',1,DXV, 1,myThid)
222     CALL MDSREADFIELD('DYU.bin',readBinaryPrec,'RS',1,DYU, 1,myThid)
223 adcroft 1.2 cs- this block needed by cubed sphere until we write more useful I/O routines
224     C !!! _EXCH_ZUV_XY_R4(DXV, DYU, unSigned, myThid)
225     cs! this is not correct <= need paired exchange for dxv,dyu
226 dimitri 1.13 IF (.NOT.useCubedSphereExchange) THEN
227     CALL EXCH_Z_XY_RS(DXV,myThid)
228     CALL EXCH_Z_XY_RS(DYU,myThid)
229     ELSE
230 adcroft 1.2 DO bj = myByLo(myThid), myByHi(myThid)
231     DO bi = myBxLo(myThid), myBxHi(myThid)
232 adcroft 1.5 cs! fix overlaps:
233     DO j=1,sNy
234     DO i=1,Olx
235     DXV(1-i,j,bi,bj)=DXV(1+i,j,bi,bj)
236 jmc 1.6 DXV(sNx+i,j,bi,bj)=DXV(i,j,bi,bj)
237 adcroft 1.5 DYU(1-i,j,bi,bj)=DYU(1+i,j,bi,bj)
238 jmc 1.6 DYU(sNx+i,j,bi,bj)=DYU(i,j,bi,bj)
239 adcroft 1.5 ENDDO
240     ENDDO
241     DO j=1,Oly
242 jmc 1.6 DO i=1-Olx,sNx+Olx
243 adcroft 1.5 DXV(i,1-j,bi,bj)=DXV(i,1+j,bi,bj)
244 jmc 1.6 DXV(i,sNy+j,bi,bj)=DXV(i,j,bi,bj)
245 adcroft 1.5 DYU(i,1-j,bi,bj)=DYU(i,1+j,bi,bj)
246 jmc 1.6 DYU(i,sNy+j,bi,bj)=DYU(i,j,bi,bj)
247 adcroft 1.5 ENDDO
248     ENDDO
249 adcroft 1.2 ENDDO
250     ENDDO
251     cs- end block
252 dimitri 1.13 ENDIF
253 adcroft 1.2
254 adcroft 1.4 CALL MDSREADFIELD('RAZ.bin',readBinaryPrec,'RS',1,RAZ, 1,myThid)
255 dimitri 1.13 IF (useCubedSphereExchange) THEN
256 adcroft 1.2 cs- this block needed by cubed sphere until we write more useful I/O routines
257     CALL EXCH_Z_XY_RS(RAZ , myThid )
258     DO bj = myByLo(myThid), myByHi(myThid)
259     DO bi = myBxLo(myThid), myBxHi(myThid)
260     RAZ(sNx+1,1,bi,bj)=RAZ(1,1,bi,bj)
261     RAZ(1,sNy+1,bi,bj)=RAZ(1,1,bi,bj)
262     ENDDO
263     ENDDO
264     cs- end block
265 dimitri 1.13 ENDIF
266 adcroft 1.2 CALL EXCH_Z_XY_RS(RAZ,myThid)
267    
268     C- Staggered (u,v pairs) quantities
269 adcroft 1.4 CALL MDSREADFIELD('DXC.bin',readBinaryPrec,'RS',1,DXC, 1,myThid)
270     CALL MDSREADFIELD('DYC.bin',readBinaryPrec,'RS',1,DYC, 1,myThid)
271 adcroft 1.2 CALL EXCH_UV_XY_RS(DXC,DYC,.FALSE.,myThid)
272    
273 adcroft 1.4 CALL MDSREADFIELD('RAW.bin',readBinaryPrec,'RS',1,RAW, 1,myThid)
274     CALL MDSREADFIELD('RAS.bin',readBinaryPrec,'RS',1,RAS, 1,myThid)
275 dimitri 1.13 IF (useCubedSphereExchange) THEN
276 adcroft 1.2 cs- this block needed by cubed sphere until we write more useful I/O routines
277     DO bj = myByLo(myThid), myByHi(myThid)
278     DO bi = myBxLo(myThid), myBxHi(myThid)
279     DO J = 1,sNy
280     c RAW(sNx+1,J,bi,bj)=RAW(1,J,bi,bj)
281     c RAS(J,sNy+1,bi,bj)=RAS(J,1,bi,bj)
282     ENDDO
283     ENDDO
284     ENDDO
285     cs- end block
286 dimitri 1.13 ENDIF
287 adcroft 1.2 CALL EXCH_UV_XY_RS(RAW,RAS,.FALSE.,myThid)
288    
289 adcroft 1.4 CALL MDSREADFIELD('DXG.bin',readBinaryPrec,'RS',1,DXG, 1,myThid)
290     CALL MDSREADFIELD('DYG.bin',readBinaryPrec,'RS',1,DYG, 1,myThid)
291 dimitri 1.13 IF (useCubedSphereExchange) THEN
292 adcroft 1.2 cs- this block needed by cubed sphere until we write more useful I/O routines
293     DO bj = myByLo(myThid), myByHi(myThid)
294     DO bi = myBxLo(myThid), myBxHi(myThid)
295     DO J = 1,sNy
296     c DYG(sNx+1,J,bi,bj)=DYG(1,J,bi,bj)
297     c DXG(J,sNy+1,bi,bj)=DXG(J,1,bi,bj)
298     ENDDO
299     ENDDO
300     ENDDO
301     cs- end block
302 dimitri 1.13 ENDIF
303 adcroft 1.2 CALL EXCH_UV_XY_RS(DYG,DXG,.FALSE.,myThid)
304    
305     c write(10) XC
306     c write(10) YC
307     c write(10) DXF
308     c write(10) DYF
309     c write(10) RA
310     c write(10) XG
311     c write(10) YG
312     c write(10) DXV
313     c write(10) DYU
314     c write(10) RAZ
315     c write(10) DXC
316     c write(10) DYC
317     c write(10) RAW
318     c write(10) RAS
319     c write(10) DXG
320     c write(10) DYG
321 jmc 1.7
322 dimitri 1.12 #else /* ifndef OLD_GRID_IO */
323 jmc 1.7
324 jmc 1.8 C-- Only do I/O if I am the master thread
325 jmc 1.7 _BEGIN_MASTER(myThid)
326 jmc 1.8
327     DO bj = 1,nSy
328     DO bi = 1,nSx
329     iG=bi+(myXGlobalLo-1)/sNx
330     WRITE(fName(1:15),'("tile",I3.3,".mitgrid")') iG
331     WRITE(msgBuf,'(A,I4)') 'tile:',iG
332 adcroft 1.10 #ifdef ALLOW_EXCH2
333 jmc 1.7 myTile = W2_myTileList(bi)
334     write(fName(1:15),'("tile",I3.3,".mitgrid")')
335     & exch2_myface(myTile)
336 jmc 1.8 WRITE(msgBuf,'(A,I4)') 'tile:',myTile
337 jmc 1.7 #endif
338 jmc 1.8 iL = ILNBLNK(msgBuf)
339     WRITE(msgBuf,'(3A)') msgBuf(1:iL),
340     & ' ; Read from file ',fName(1:15)
341     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
342     & SQUEEZE_RIGHT , myThid)
343     WRITE(msgBuf,'(A)') ' =>'
344    
345     CALL READSYMTILE_RS(fName,1,XC,bi,bj,buf,myThid)
346     iL = ILNBLNK(msgBuf)
347     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'XC'
348     CALL READSYMTILE_RS(fName,2,YC,bi,bj,buf,myThid)
349     iL = ILNBLNK(msgBuf)
350     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'YC'
351     CALL READSYMTILE_RS(fName,3,DXF,bi,bj,buf,myThid)
352     iL = ILNBLNK(msgBuf)
353     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'DXF'
354     CALL READSYMTILE_RS(fName,4,DYF,bi,bj,buf,myThid)
355     iL = ILNBLNK(msgBuf)
356     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'DYF'
357     CALL READSYMTILE_RS(fName,5,RA,bi,bj,buf,myThid)
358     iL = ILNBLNK(msgBuf)
359     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'RA'
360     CALL READSYMTILE_RS(fName,6,XG,bi,bj,buf,myThid)
361     iL = ILNBLNK(msgBuf)
362     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'XG'
363     CALL READSYMTILE_RS(fName,7,YG,bi,bj,buf,myThid)
364     iL = ILNBLNK(msgBuf)
365     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'YG'
366     CALL READSYMTILE_RS(fName,8,DXV,bi,bj,buf,myThid)
367     iL = ILNBLNK(msgBuf)
368     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'DXV'
369     CALL READSYMTILE_RS(fName,9,DYU,bi,bj,buf,myThid)
370     iL = ILNBLNK(msgBuf)
371     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'DYU'
372     CALL READSYMTILE_RS(fName,10,RAZ,bi,bj,buf,myThid)
373     iL = ILNBLNK(msgBuf)
374     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'RAZ'
375     CALL READSYMTILE_RS(fName,11,DXC,bi,bj,buf,myThid)
376     iL = ILNBLNK(msgBuf)
377     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'DXC'
378     CALL READSYMTILE_RS(fName,12,DYC,bi,bj,buf,myThid)
379     iL = ILNBLNK(msgBuf)
380     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'DYC'
381     CALL READSYMTILE_RS(fName,13,RAW,bi,bj,buf,myThid)
382     iL = ILNBLNK(msgBuf)
383     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'RAW'
384     CALL READSYMTILE_RS(fName,14,RAS,bi,bj,buf,myThid)
385     iL = ILNBLNK(msgBuf)
386     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'RAS'
387     CALL READSYMTILE_RS(fName,15,DXG,bi,bj,buf,myThid)
388     iL = ILNBLNK(msgBuf)
389     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'DXG'
390     CALL READSYMTILE_RS(fName,16,DYG,bi,bj,buf,myThid)
391     iL = ILNBLNK(msgBuf)
392     WRITE(msgBuf,'(A,1X,A)') msgBuf(1:iL),'DYG'
393    
394     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
395     & SQUEEZE_RIGHT , myThid)
396 jmc 1.7
397     ENDDO
398     ENDDO
399 edhill 1.18
400 jmc 1.8 _END_MASTER(myThid)
401 jmc 1.7
402     CALL EXCH_XY_RS(XC,myThid)
403     CALL EXCH_XY_RS(YC,myThid)
404     C !!! _EXCH_OUV_XY_R4(DXF, DYF, unSigned, myThid )
405 dimitri 1.12 #ifdef HRCUBE
406     CALL EXCH_XY_RS(DXF,myThid)
407     CALL EXCH_XY_RS(DYF,myThid)
408     #endif
409 jmc 1.7 CALL EXCH_XY_RS(RA,myThid )
410     CALL EXCH_Z_XY_RS(XG,myThid)
411     CALL EXCH_Z_XY_RS(YG,myThid)
412     C !!! _EXCH_ZUV_XY_R4(DXV, DYU, unSigned, myThid)
413     c CALL EXCH_Z_XY_RS(DXV,myThid)
414     c CALL EXCH_Z_XY_RS(DYU,myThid)
415     CALL EXCH_Z_XY_RS(RAZ,myThid)
416     CALL EXCH_UV_XY_RS(DXC,DYC,.FALSE.,myThid)
417     CALL EXCH_UV_XY_RS(RAW,RAS,.FALSE.,myThid)
418     CALL EXCH_UV_XY_RS(DYG,DXG,.FALSE.,myThid)
419    
420 dimitri 1.12 #endif /* OLD_GRID_IO */
421 jmc 1.7
422 edhill 1.18 #ifdef ALLOW_MNC
423     ENDIF
424     #endif /* ALLOW_MNC */
425    
426 jmc 1.17 c CALL WRITE_FULLARRAY_RL('DXV',DXV,1,0,0,0,myThid)
427     c CALL WRITE_FULLARRAY_RL('DYU',DYU,1,0,0,0,myThid)
428     c CALL WRITE_FULLARRAY_RL('RAZ',RAZ,1,0,0,0,myThid)
429     c CALL WRITE_FULLARRAY_RL('XG',XG,1,0,0,0,myThid)
430     c CALL WRITE_FULLARRAY_RL('YG',YG,1,0,0,0,myThid)
431 jmc 1.7
432 dimitri 1.15 C-- Require that 0 <= longitude < 360 if using exf package
433     #ifdef ALLOW_EXF
434     DO bj = 1,nSy
435     DO bi = 1,nSx
436     DO J=1-Oly,sNy+Oly
437     DO I=1-Olx,sNx+Olx
438     IF (XC(i,j,bi,bj).lt.0.) XC(i,j,bi,bj)=XC(i,j,bi,bj)+360.
439     IF (XG(i,j,bi,bj).lt.0.) XG(i,j,bi,bj)=XG(i,j,bi,bj)+360.
440     ENDDO
441     ENDDO
442     ENDDO
443     ENDDO
444     #endif /* ALLOW_EXF */
445    
446 dimitri 1.14 C-- Now let's look at all these beasts
447     IF ( debugLevel .GE. debLevB ) THEN
448     myiter = 1
449     CALL PLOT_FIELD_XYRL( XC , 'Current XC ' ,
450     & myIter, myThid )
451     CALL PLOT_FIELD_XYRL( YC , 'Current YC ' ,
452     & myIter, myThid )
453     CALL PLOT_FIELD_XYRL( DXF , 'Current DXF ' ,
454     & myIter, myThid )
455     CALL PLOT_FIELD_XYRL( XC , 'Current XC ' ,
456     & myIter, myThid )
457     CALL PLOT_FIELD_XYRL( DYF , 'Current DYF ' ,
458     & myIter, myThid )
459     CALL PLOT_FIELD_XYRL( RA , 'Current RA ' ,
460     & myIter, myThid )
461     CALL PLOT_FIELD_XYRL( XG , 'Current XG ' ,
462     & myIter, myThid )
463     CALL PLOT_FIELD_XYRL( YG , 'Current YG ' ,
464     & myIter, myThid )
465     CALL PLOT_FIELD_XYRL( DXV , 'Current DXV ' ,
466     & myIter, myThid )
467     CALL PLOT_FIELD_XYRL( DYU , 'Current DYU ' ,
468     & myIter, myThid )
469     CALL PLOT_FIELD_XYRL( RAZ , 'Current RAZ ' ,
470     & myIter, myThid )
471     CALL PLOT_FIELD_XYRL( DXC , 'Current DXC ' ,
472     & myIter, myThid )
473     CALL PLOT_FIELD_XYRL( DYC , 'Current DYC ' ,
474     & myIter, myThid )
475     CALL PLOT_FIELD_XYRL( RAW , 'Current RAW ' ,
476     & myIter, myThid )
477     CALL PLOT_FIELD_XYRL( RAS , 'Current RAS ' ,
478     & myIter, myThid )
479     CALL PLOT_FIELD_XYRL( DXG , 'Current DXG ' ,
480     & myIter, myThid )
481     CALL PLOT_FIELD_XYRL( DYG , 'Current DYG ' ,
482     & myIter, myThid )
483     ENDIF
484 jmc 1.7
485     RETURN
486     END
487    
488     C --------------------------------------------------------------------------
489    
490     SUBROUTINE READSYMTILE_RS(fName,irec,array,bi,bj,buf,myThid)
491     C /==========================================================\
492     C | SUBROUTINE READSYMTILE_RS |
493     C |==========================================================|
494     C \==========================================================/
495     IMPLICIT NONE
496    
497     C === Global variables ===
498     #include "SIZE.h"
499     #include "EEPARAMS.h"
500 adcroft 1.10 #ifdef ALLOW_EXCH2
501 jmc 1.7 #include "W2_EXCH2_TOPOLOGY.h"
502     #include "W2_EXCH2_PARAMS.h"
503 adcroft 1.10 #endif /* ALLOW_EXCH2 */
504 jmc 1.7
505     C == Routine arguments ==
506     CHARACTER*(*) fName
507     INTEGER irec
508     _RS array(1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)
509     INTEGER bi,bj,myThid
510 adcroft 1.10 #ifdef ALLOW_EXCH2
511 jmc 1.7 _RL buf(1:sNx*nSx*nPx+1)
512     #else
513     _RL buf(1:sNx+1,1:sNy+1)
514 adcroft 1.10 #endif /* ALLOW_EXCH2 */
515 jmc 1.7
516     C == Local variables ==
517     INTEGER I,J,dUnit
518     INTEGER length_of_rec
519     INTEGER MDS_RECLEN
520     INTEGER TN, DNX, DNY, TBX, TBY, TNX, TNY, II, iBase
521    
522 adcroft 1.10 #ifdef ALLOW_EXCH2
523 jmc 1.7 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, 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 adcroft 1.10 #else /* ALLOW_EXCH2 */
555 jmc 1.7
556     CALL MDSFINDUNIT( dUnit, mythid )
557     length_of_rec=MDS_RECLEN( 64, (sNx+1)*(sNy+1), myThid )
558     OPEN( dUnit, file=fName, 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 adcroft 1.10 #endif /* ALLOW_EXCH2 */
579 adcroft 1.2
580     RETURN
581     END

  ViewVC Help
Powered by ViewVC 1.1.22