/[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.31 - (hide annotations) (download)
Sun Aug 27 18:30:47 2006 UTC (17 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58o_post
Changes since 1.30: +16 -16 lines
use _3D_ (instead of _XY_) version of EXCH_Z & EXCH_UV_AGRID with 3rd
 dimension (= 1) as input argument.

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

  ViewVC Help
Powered by ViewVC 1.1.22