/[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.23 - (hide annotations) (download)
Sat Sep 17 03:17:05 2005 UTC (18 years, 9 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint57s_post
Changes since 1.22: +2 -1 lines
 o fix mnc checkpoint writing problem reported by Baylor -- now works
   correctly with all the MLAdjust inputs

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

  ViewVC Help
Powered by ViewVC 1.1.22