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

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

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


Revision 1.21 - (show annotations) (download)
Mon Aug 22 23:07:14 2005 UTC (18 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57r_post
Changes since 1.20: +9 -4 lines
allow to compile without pkg MDSIO

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

  ViewVC Help
Powered by ViewVC 1.1.22