/[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.24 - (hide annotations) (download)
Wed Sep 28 01:43:55 2005 UTC (18 years, 8 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint57t_post, checkpoint57v_post, checkpint57u_post, checkpoint57w_post
Changes since 1.23: +19 -17 lines
 o add the turning angles and read the grid at double precision -- note
   that precision will soon become a run-time flag

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

  ViewVC Help
Powered by ViewVC 1.1.22