/[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.33 - (hide annotations) (download)
Sat Sep 2 21:31:38 2006 UTC (17 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58t_post, checkpoint58p_post, checkpoint58q_post, mitgcm_mapl_00, checkpoint58r_post, checkpoint58s_post
Changes since 1.32: +2 -2 lines
remove unused variable

1 jmc 1.33 C $Header: /u/gcmpack/MITgcm/model/src/ini_curvilinear_grid.F,v 1.32 2006/09/02 21:27:58 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.33 INTEGER bi,bj
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.32 CALL PLOT_FIELD_XYRS( xC , 'Current xC ', 0, myThid )
412     CALL PLOT_FIELD_XYRS( yC , 'Current yC ', 0, myThid )
413     CALL PLOT_FIELD_XYRS( dxF , 'Current dxF ', 0, myThid )
414     CALL PLOT_FIELD_XYRS( dyF , 'Current dyF ', 0, myThid )
415     CALL PLOT_FIELD_XYRS( rA , 'Current rA ', 0, myThid )
416     CALL PLOT_FIELD_XYRS( xG , 'Current xG ', 0, myThid )
417     CALL PLOT_FIELD_XYRS( yG , 'Current yG ', 0, myThid )
418     CALL PLOT_FIELD_XYRS( dxV , 'Current dxV ', 0, myThid )
419     CALL PLOT_FIELD_XYRS( dyU , 'Current dyU ', 0, myThid )
420     CALL PLOT_FIELD_XYRS( rAz , 'Current rAz ', 0, myThid )
421     CALL PLOT_FIELD_XYRS( dxC , 'Current dxC ', 0, myThid )
422     CALL PLOT_FIELD_XYRS( dyC , 'Current dyC ', 0, myThid )
423     CALL PLOT_FIELD_XYRS( rAw , 'Current rAw ', 0, myThid )
424     CALL PLOT_FIELD_XYRS( rAs , 'Current rAs ', 0, myThid )
425     CALL PLOT_FIELD_XYRS( dxG , 'Current dxG ', 0, myThid )
426     CALL PLOT_FIELD_XYRS( dyG , 'Current dyG ', 0, myThid )
427     CALL PLOT_FIELD_XYRS(angleCosC, 'Current AngleCS ', 0, myThid )
428     CALL PLOT_FIELD_XYRS(angleSinC, 'Current AngleSN ', 0, myThid )
429 dimitri 1.14 ENDIF
430 jmc 1.7
431     RETURN
432     END
433    
434 jmc 1.30 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
435    
436     CBOP
437     C !ROUTINE: READSYMTILE_RS
438     C !INTERFACE:
439     SUBROUTINE READSYMTILE_RS(
440     I fName, irec,
441     U array, buf,
442     I bi,bj, myThid )
443     C !DESCRIPTION: \bv
444     C *==========================================================*
445     C | SUBROUTINE READSYMTILE_RS
446     C *==========================================================*
447     C *==========================================================*
448     C \ev
449 jmc 1.7
450 jmc 1.30 C !USES:
451 jmc 1.7 IMPLICIT NONE
452     C === Global variables ===
453     #include "SIZE.h"
454     #include "EEPARAMS.h"
455 adcroft 1.10 #ifdef ALLOW_EXCH2
456 jmc 1.7 #include "W2_EXCH2_TOPOLOGY.h"
457     #include "W2_EXCH2_PARAMS.h"
458 adcroft 1.10 #endif /* ALLOW_EXCH2 */
459 jmc 1.7
460 jmc 1.30 C !INPUT/OUTPUT PARAMETERS:
461 jmc 1.7 C == Routine arguments ==
462     CHARACTER*(*) fName
463     INTEGER irec
464     _RS array(1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)
465 adcroft 1.10 #ifdef ALLOW_EXCH2
466 jmc 1.7 _RL buf(1:sNx*nSx*nPx+1)
467     #else
468     _RL buf(1:sNx+1,1:sNy+1)
469 adcroft 1.10 #endif /* ALLOW_EXCH2 */
470 jmc 1.30 INTEGER bi,bj, myThid
471     CEOP
472 jmc 1.7
473 jmc 1.30 C !LOCAL VARIABLES:
474 jmc 1.7 C == Local variables ==
475 jmc 1.20 INTEGER I,J,dUnit, iLen
476 jmc 1.7 INTEGER length_of_rec
477     INTEGER MDS_RECLEN
478 jmc 1.21 #ifdef ALLOW_EXCH2
479 jmc 1.20 INTEGER TN, dNx, dNy, TBX, TBY, TNX, TNY, II, iBase
480 jmc 1.21 #endif
481 jmc 1.20 INTEGER ILNBLNK
482     EXTERNAL ILNBLNK
483 jmc 1.7
484 jmc 1.20 iLen = ILNBLNK(fName)
485 adcroft 1.10 #ifdef ALLOW_EXCH2
486 jmc 1.7 C Figure out offset of tile within face
487     TN = W2_myTileList(bi)
488 jmc 1.20 dNx = exch2_mydnx(TN)
489     dNy = exch2_mydny(TN)
490 jmc 1.7 TBX = exch2_tbasex(TN)
491     TBY = exch2_tbasey(TN)
492     TNX = exch2_tnx(TN)
493     TNY = exch2_tny(TN)
494    
495 jmc 1.20 CALL MDSFINDUNIT( dUnit, myThid )
496 jmc 1.7 length_of_rec=MDS_RECLEN( 64, (dNx+1), myThid )
497 jmc 1.20 OPEN( dUnit, file=fName(1:iLen), status='old',
498     & access='direct', recl=length_of_rec )
499 jmc 1.7 J=0
500     iBase=(irec-1)*(dny+1)
501 jmc 1.20 DO I=1+TBY,sNy+1+TBY
502     READ(dUnit,rec=I+iBase)(buf(ii),ii=1,dNx+1)
503 jmc 1.7 #ifdef _BYTESWAPIO
504     #ifdef REAL4_IS_SLOW
505     CALL MDS_BYTESWAPR8((dNx+1), buf)
506     #else
507     CALL MDS_BYTESWAPR4((dNx+1), buf)
508     #endif
509     #endif
510     J=J+1
511     DO II=1,sNx+1
512     array(II,J,bi,bj)=buf(II+TBX)
513     ENDDO
514     ENDDO
515     CLOSE( dUnit )
516 jmc 1.28
517 adcroft 1.10 #else /* ALLOW_EXCH2 */
518 jmc 1.7
519 jmc 1.20 CALL MDSFINDUNIT( dUnit, myThid )
520 jmc 1.7 length_of_rec=MDS_RECLEN( 64, (sNx+1)*(sNy+1), myThid )
521 jmc 1.20 OPEN( dUnit, file=fName(1:iLen), status='old',
522     & access='direct', recl=length_of_rec )
523 jmc 1.7 READ(dUnit,rec=irec) buf
524     CLOSE( dUnit )
525    
526     #ifdef _BYTESWAPIO
527     #ifdef REAL4_IS_SLOW
528     CALL MDS_BYTESWAPR8((sNx+1)*(sNy+1), buf)
529     #else
530     CALL MDS_BYTESWAPR4((sNx+1)*(sNy+1), buf)
531     #endif
532     #endif
533    
534     DO J=1,sNy+1
535     DO I=1,sNx+1
536     array(I,J,bi,bj)=buf(I,J)
537     ENDDO
538     ENDDO
539     c write(0,*) irec,buf(1,1),array(1,1,1,1)
540    
541 adcroft 1.10 #endif /* ALLOW_EXCH2 */
542 adcroft 1.2
543     RETURN
544     END

  ViewVC Help
Powered by ViewVC 1.1.22