/[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.48 - (hide annotations) (download)
Tue Mar 16 00:08:27 2010 UTC (14 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l
Changes since 1.47: +2 -2 lines
avoid unbalanced quote (single or double) in commented line

1 jmc 1.48 C $Header: /u/gcmpack/MITgcm/model/src/ini_curvilinear_grid.F,v 1.47 2009/06/28 01:03: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    
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 jmc 1.28 C | SUBROUTINE INI_CURVILINEAR_GRID
14     C | o Initialise curvilinear coordinate system
15 cnh 1.3 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.43 #include "W2_EXCH2_SIZE.h"
32 jmc 1.7 #include "W2_EXCH2_TOPOLOGY.h"
33     #endif
34 edhill 1.18 #ifdef ALLOW_MNC
35     #include "MNC_PARAMS.h"
36     #endif
37 jmc 1.7
38 cnh 1.3 C !INPUT/OUTPUT PARAMETERS:
39 adcroft 1.2 C == Routine arguments ==
40 jmc 1.21 C myThid - Number of this instance of INI_CURVILINEAR_GRID
41 adcroft 1.2 INTEGER myThid
42    
43 cnh 1.3 C !LOCAL VARIABLES:
44 jmc 1.45 C == Shared Local variables ==
45     LOGICAL anglesAreSet
46     COMMON /LOCAL_INI_CURVILINEAR_GRID/ anglesAreSet
47 adcroft 1.2 C == Local variables ==
48 jmc 1.33 INTEGER bi,bj
49 jmc 1.36 INTEGER i,j
50 jmc 1.25 CHARACTER*(MAX_LEN_MBUF) msgBuf
51 jmc 1.46 INTEGER fp
52 edhill 1.18 #ifdef ALLOW_MNC
53     CHARACTER*(80) mncFn
54     #endif
55 jmc 1.25 #ifndef OLD_GRID_IO
56 jmc 1.40 INTEGER iG, jG, iL, iLen
57 jmc 1.25 CHARACTER*(MAX_LEN_FNAM) fName
58     CHARACTER*(MAX_LEN_MBUF) tmpBuf
59 jmc 1.8 INTEGER ILNBLNK
60     EXTERNAL ILNBLNK
61 jmc 1.25 #endif
62 cnh 1.3 CEOP
63 adcroft 1.2
64     C-- Set everything to zero everywhere
65     DO bj = myByLo(myThid), myByHi(myThid)
66     DO bi = myBxLo(myThid), myBxHi(myThid)
67    
68 jmc 1.36 DO j=1-Oly,sNy+Oly
69     DO i=1-Olx,sNx+Olx
70 jmc 1.28 xC(i,j,bi,bj)=0.
71     yC(i,j,bi,bj)=0.
72     xG(i,j,bi,bj)=0.
73     yG(i,j,bi,bj)=0.
74     dxC(i,j,bi,bj)=0.
75     dyC(i,j,bi,bj)=0.
76     dxG(i,j,bi,bj)=0.
77     dyG(i,j,bi,bj)=0.
78     dxF(i,j,bi,bj)=0.
79     dyF(i,j,bi,bj)=0.
80     dxV(i,j,bi,bj)=0.
81     dyU(i,j,bi,bj)=0.
82     rA(i,j,bi,bj)=0.
83     rAz(i,j,bi,bj)=0.
84     rAw(i,j,bi,bj)=0.
85     rAs(i,j,bi,bj)=0.
86 adcroft 1.2 tanPhiAtU(i,j,bi,bj)=0.
87     tanPhiAtV(i,j,bi,bj)=0.
88 jmc 1.20 angleCosC(i,j,bi,bj)=1.
89     angleSinC(i,j,bi,bj)=0.
90 jmc 1.36 cosFacU(j,bi,bj)=1.
91     cosFacV(j,bi,bj)=1.
92     sqCosFacU(j,bi,bj)=1.
93     sqCosFacV(j,bi,bj)=1.
94 adcroft 1.2 ENDDO
95     ENDDO
96    
97 jmc 1.7 ENDDO
98     ENDDO
99 adcroft 1.2
100     C Here we make no assumptions about grid symmetry and simply
101     C read the raw grid data from files
102    
103 jmc 1.7 #ifdef OLD_GRID_IO
104 jmc 1.46 C-- File Precision is different from "new grid IO" (always 64-bits precision)
105     C which should probably be changed to the standard file-prec (= readBinaryPrec)
106     fp = readBinaryPrec
107 jmc 1.7
108 adcroft 1.2 C- Cell centered quantities
109 jmc 1.46 CALL READ_REC_3D_RS( 'LONC.bin', fp, 1, xC, 1, 0, myThid )
110     CALL READ_REC_3D_RS( 'LATC.bin', fp, 1, yC, 1, 0, myThid )
111 jmc 1.42 _EXCH_XY_RS(xC,myThid)
112     _EXCH_XY_RS(yC,myThid)
113 jmc 1.28
114 jmc 1.46 CALL READ_REC_3D_RS( 'DXF.bin', fp, 1, dxF, 1, 0, myThid )
115     CALL READ_REC_3D_RS( 'DYF.bin', fp, 1, dyF, 1, 0, myThid )
116 jmc 1.31 CALL EXCH_UV_AGRID_3D_RS( dxF, dyF, .FALSE., 1, myThid )
117 adcroft 1.2
118 jmc 1.46 CALL READ_REC_3D_RS( 'RA.bin' , fp, 1, rA, 1, 0, myThid )
119 jmc 1.42 _EXCH_XY_RS(rA,myThid )
120 adcroft 1.2
121 jmc 1.45 _BEGIN_MASTER(myThid)
122     anglesAreSet = .FALSE.
123     _END_MASTER(myThid)
124    
125 adcroft 1.2 C- Corner quantities
126 jmc 1.46 CALL READ_REC_3D_RS( 'LONG.bin', fp, 1, xG, 1, 0, myThid )
127     CALL READ_REC_3D_RS( 'LATG.bin', fp, 1, yG, 1, 0, myThid )
128 dimitri 1.13 IF (useCubedSphereExchange) THEN
129 adcroft 1.2 cs- this block needed by cubed sphere until we write more useful I/O routines
130 jmc 1.46 IF ( nPx*nPy*nSy.EQ.1 .AND. nSx.EQ.6 ) THEN
131     _BARRIER
132     _BEGIN_MASTER(myThid)
133     bi=3
134     bj=1
135     yG(1,sNy+1,bj,1)=yG(1,1,bi,1)
136     bj=bj+2
137     yG(1,sNy+1,bj,1)=yG(1,1,bi,1)
138     bj=bj+2
139     yG(1,sNy+1,bj,1)=yG(1,1,bi,1)
140     bi=6
141     bj=2
142     yG(sNx+1,1,bj,1)=yG(1,1,bi,1)
143     bj=bj+2
144     yG(sNx+1,1,bj,1)=yG(1,1,bi,1)
145     bj=bj+2
146     yG(sNx+1,1,bj,1)=yG(1,1,bi,1)
147     _END_MASTER(myThid)
148     _BARRIER
149     ELSE
150     WRITE(msgBuf,'(2A)') 'INI_CURVILINEAR_GRID:',
151     & ' OLD_GRID_IO only works for 6 tiles on 1 proc'
152     CALL PRINT_ERROR( msgBuf, myThid )
153     STOP 'ABNORMAL END: S/R INI_CURVILINEAR_GRID'
154     ENDIF
155 adcroft 1.2 cs- end block
156 dimitri 1.13 ENDIF
157 jmc 1.31 CALL EXCH_Z_3D_RS( xG, 1, myThid )
158     CALL EXCH_Z_3D_RS( yG, 1, myThid )
159 adcroft 1.2
160 jmc 1.46 CALL READ_REC_3D_RS( 'DXV.bin', fp, 1, dxV, 1, 0, myThid )
161     CALL READ_REC_3D_RS( 'DYU.bin', fp, 1, dyU, 1, 0, myThid )
162 adcroft 1.2 cs- this block needed by cubed sphere until we write more useful I/O routines
163 jmc 1.46 IF ( useCubedSphereExchange ) THEN
164     IF ( nPx*nPy*nSx*nSy.EQ.6 .AND. sNx.EQ.sNy ) THEN
165     DO bj = myByLo(myThid), myByHi(myThid)
166     DO bi = myBxLo(myThid), myBxHi(myThid)
167     dxV(sNx+1,1,bi,bj)=dxV(1,1,bi,bj)
168     dxV(1,sNy+1,bi,bj)=dxV(1,1,bi,bj)
169     dyU(sNx+1,1,bi,bj)=dyU(1,1,bi,bj)
170     dyU(1,sNy+1,bi,bj)=dyU(1,1,bi,bj)
171 adcroft 1.5 ENDDO
172     ENDDO
173 jmc 1.46 ELSE
174     WRITE(msgBuf,'(2A)') 'INI_CURVILINEAR_GRID:',
175     & ' OLD_GRID_IO only works with 1 tile per face'
176     CALL PRINT_ERROR( msgBuf, myThid )
177     STOP 'ABNORMAL END: S/R INI_CURVILINEAR_GRID'
178     ENDIF
179 adcroft 1.2 cs- end block
180 dimitri 1.13 ENDIF
181 jmc 1.46 CALL EXCH_UV_BGRID_3D_RS( dxV, dyU, .FALSE., 1, myThid )
182 adcroft 1.2
183 jmc 1.46 CALL READ_REC_3D_RS( 'RAZ.bin', fp, 1, rAz, 1, 0, myThid )
184 dimitri 1.13 IF (useCubedSphereExchange) THEN
185 adcroft 1.2 cs- this block needed by cubed sphere until we write more useful I/O routines
186 jmc 1.46 DO bj = myByLo(myThid), myByHi(myThid)
187     DO bi = myBxLo(myThid), myBxHi(myThid)
188     rAz(sNx+1,1,bi,bj)=rAz(1,1,bi,bj)
189     rAz(1,sNy+1,bi,bj)=rAz(1,1,bi,bj)
190     ENDDO
191 adcroft 1.2 ENDDO
192     cs- end block
193 dimitri 1.13 ENDIF
194 jmc 1.31 CALL EXCH_Z_3D_RS( rAz, 1, myThid )
195 adcroft 1.2
196     C- Staggered (u,v pairs) quantities
197 jmc 1.46 CALL READ_REC_3D_RS( 'DXC.bin', fp, 1, dxC, 1, 0, myThid )
198     CALL READ_REC_3D_RS( 'DYC.bin', fp, 1, dyC, 1, 0, myThid )
199 jmc 1.28 CALL EXCH_UV_XY_RS(dxC,dyC,.FALSE.,myThid)
200 adcroft 1.2
201 jmc 1.46 CALL READ_REC_3D_RS( 'RAW.bin', fp, 1, rAw, 1, 0, myThid )
202     CALL READ_REC_3D_RS( 'RAS.bin', fp, 1, rAs, 1, 0, myThid )
203 jmc 1.28 CALL EXCH_UV_XY_RS(rAw,rAs,.FALSE.,myThid)
204 adcroft 1.2
205 jmc 1.46 CALL READ_REC_3D_RS( 'DXG.bin', fp, 1, dxG, 1, 0, myThid )
206     CALL READ_REC_3D_RS( 'DYG.bin', fp, 1, dyG, 1, 0, myThid )
207 jmc 1.28 CALL EXCH_UV_XY_RS(dyG,dxG,.FALSE.,myThid)
208 adcroft 1.2
209 jmc 1.28 c write(10) xC
210     c write(10) yC
211     c write(10) dxF
212     c write(10) dyF
213     c write(10) rA
214     c write(10) xG
215     c write(10) yG
216     c write(10) dxV
217     c write(10) dyU
218     c write(10) rAz
219     c write(10) dxC
220     c write(10) dyC
221     c write(10) rAw
222     c write(10) rAs
223     c write(10) dxG
224     c write(10) dyG
225 jmc 1.7
226 dimitri 1.12 #else /* ifndef OLD_GRID_IO */
227 jmc 1.7
228 jmc 1.30 #ifdef ALLOW_MNC
229     IF (useMNC .AND. readgrid_mnc) THEN
230     C-- read NetCDF files:
231    
232     DO i = 1,80
233     mncFn(i:i) = ' '
234     ENDDO
235     write(mncFn,'(a)') 'mitgrid'
236     DO i = 1,MAX_LEN_MBUF
237     msgBuf(i:i) = ' '
238     ENDDO
239     WRITE(msgBuf,'(2A)') msgBuf,' ; Reading grid info using MNC'
240     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
241     & SQUEEZE_RIGHT , myThid)
242     CALL MNC_FILE_CLOSE_ALL_MATCHING(mncFn, myThid)
243     CALL MNC_CW_SET_UDIM(mncFn, 1, myThid)
244     CALL MNC_CW_SET_CITER(mncFn, 2, -1, -1, -1, myThid)
245     CALL MNC_CW_SET_UDIM(mncFn, 1, myThid)
246     CALL MNC_CW_RS_R('D',mncFn,0,0,'XC', xC, myThid)
247     CALL MNC_CW_RS_R('D',mncFn,0,0,'XG', xG, myThid)
248     CALL MNC_CW_RS_R('D',mncFn,0,0,'YC', yC, myThid)
249     CALL MNC_CW_RS_R('D',mncFn,0,0,'YG', yG, myThid)
250     CALL MNC_CW_RS_R('D',mncFn,0,0,'dxC',dxC, myThid)
251     CALL MNC_CW_RS_R('D',mncFn,0,0,'dyC',dyC, myThid)
252     CALL MNC_CW_RS_R('D',mncFn,0,0,'dxF',dxF, myThid)
253     CALL MNC_CW_RS_R('D',mncFn,0,0,'dyF',dyF, myThid)
254     CALL MNC_CW_RS_R('D',mncFn,0,0,'dxG',dxG, myThid)
255     CALL MNC_CW_RS_R('D',mncFn,0,0,'dyG',dyG, myThid)
256     CALL MNC_CW_RS_R('D',mncFn,0,0,'dxV',dxV, myThid)
257     CALL MNC_CW_RS_R('D',mncFn,0,0,'dyU',dyU, myThid)
258     CALL MNC_CW_RS_R('D',mncFn,0,0,'rA', rA, myThid)
259     CALL MNC_CW_RS_R('D',mncFn,0,0,'rAz',rAz, myThid)
260     CALL MNC_CW_RS_R('D',mncFn,0,0,'rAw',rAw, myThid)
261     CALL MNC_CW_RS_R('D',mncFn,0,0,'rAs',rAs, myThid)
262     CALL MNC_CW_RS_R('D',mncFn,0,0,'AngleCS',angleCosC,myThid)
263     CALL MNC_CW_RS_R('D',mncFn,0,0,'AngleSN',angleSinC,myThid)
264     anglesAreSet = .TRUE.
265    
266     ELSE
267     C-- read Binary files:
268     #endif /* ALLOW_MNC */
269    
270 jmc 1.36 C-- File Precision: keep 64-bits precision (as it used to be)
271     C but should probably change it to the standard file-prec (= readBinaryPrec)
272     fp = precFloat64
273     c fp = readBinaryPrec
274    
275 jmc 1.46 C-- Everyone must wait for the initialisation to be done
276     _BARRIER
277    
278     C-- Only do I/O if I am the master thread
279     _BEGIN_MASTER(myThid)
280    
281 jmc 1.8 DO bj = 1,nSy
282     DO bi = 1,nSx
283 jmc 1.40 #ifdef ALLOW_EXCH2
284     C- Use face number:
285 jmc 1.47 jG = W2_myTileList(bi,bj)
286 jmc 1.40 iG = exch2_myface(jG)
287     WRITE(tmpBuf,'(A,I4)') 'tile:',jG
288     #else
289     C- Tile Id number = Bi + (Bj-1)*(nSx*nPx) with tile global-indices Bi,Bj
290 jmc 1.36 iG = bi+(myXGlobalLo-1)/sNx
291 jmc 1.40 jG = bj+(myYGlobalLo-1)/sNy
292     WRITE(tmpBuf,'(2(A,I3))') 'tile:',iG,' ,',jG
293     iG = iG + (jG-1)*(nSx*nPx)
294 jmc 1.20 #endif
295 jmc 1.36
296 jmc 1.20 iLen = ILNBLNK(horizGridFile)
297     IF ( iLen .EQ. 0 ) THEN
298     WRITE(fName,'("tile",I3.3,".mitgrid")') iG
299     ELSE
300     WRITE(fName,'(2A,I3.3,A)') horizGridFile(1:iLen),
301     & '.face',iG,'.bin'
302     ENDIF
303     iLen = ILNBLNK(fName)
304     iL = ILNBLNK(tmpBuf)
305     WRITE(msgBuf,'(3A)') tmpBuf(1:iL),
306     & ' ; Read from file ',fName(1:iLen)
307 jmc 1.8 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
308     & SQUEEZE_RIGHT , myThid)
309     WRITE(msgBuf,'(A)') ' =>'
310    
311 jmc 1.36 #ifdef ALLOW_MDSIO
312     CALL MDS_FACEF_READ_RS( fName, fp, 1, xC, bi, bj, myThid )
313 jmc 1.8 iL = ILNBLNK(msgBuf)
314 jmc 1.28 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'xC'
315 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp, 2, yC, bi, bj, myThid )
316 jmc 1.20 iL = ILNBLNK(tmpBuf)
317 jmc 1.28 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'yC'
318 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp, 3, dxF, bi, bj, myThid )
319 jmc 1.8 iL = ILNBLNK(msgBuf)
320 jmc 1.28 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'dxF'
321 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp, 4, dyF, bi, bj, myThid )
322 jmc 1.20 iL = ILNBLNK(tmpBuf)
323 jmc 1.28 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'dyF'
324 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp, 5, rA, bi, bj, myThid )
325 jmc 1.8 iL = ILNBLNK(msgBuf)
326 jmc 1.28 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'rA'
327 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp, 6, xG, bi, bj, myThid )
328 jmc 1.20 iL = ILNBLNK(tmpBuf)
329 jmc 1.28 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'xG'
330 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp, 7, yG, bi, bj, myThid )
331 jmc 1.8 iL = ILNBLNK(msgBuf)
332 jmc 1.28 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'yG'
333 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp, 8, dxV, bi, bj, myThid )
334 jmc 1.20 iL = ILNBLNK(tmpBuf)
335 jmc 1.28 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'dxV'
336 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp, 9, dyU, bi, bj, myThid )
337 jmc 1.8 iL = ILNBLNK(msgBuf)
338 jmc 1.28 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'dyU'
339 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp,10, rAz, bi, bj, myThid )
340 jmc 1.20 iL = ILNBLNK(tmpBuf)
341 jmc 1.28 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'rAz'
342 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp,11, dxC, bi, bj, myThid )
343 jmc 1.8 iL = ILNBLNK(msgBuf)
344 jmc 1.28 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'dxC'
345 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp,12, dyC, bi, bj, myThid )
346 jmc 1.20 iL = ILNBLNK(tmpBuf)
347 jmc 1.28 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'dyC'
348 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp,13, rAw, bi, bj, myThid )
349 jmc 1.8 iL = ILNBLNK(msgBuf)
350 jmc 1.28 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'rAw'
351 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp,14, rAs, bi, bj, myThid )
352 jmc 1.20 iL = ILNBLNK(tmpBuf)
353 jmc 1.28 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'rAs'
354 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp,15, dxG, bi, bj, myThid )
355 jmc 1.8 iL = ILNBLNK(msgBuf)
356 jmc 1.28 WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'dxG'
357 jmc 1.36 CALL MDS_FACEF_READ_RS( fName, fp,16, dyG, bi, bj, myThid )
358 jmc 1.20 iL = ILNBLNK(tmpBuf)
359 jmc 1.28 WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'dyG'
360 jmc 1.20
361     iLen = ILNBLNK(horizGridFile)
362     IF ( iLen.GT.0 ) THEN
363 jmc 1.36 CALL MDS_FACEF_READ_RS(fName,fp,17,angleCosC,bi,bj,myThid)
364 jmc 1.20 iL = ILNBLNK(msgBuf)
365     WRITE(tmpBuf,'(A,1X,A)') msgBuf(1:iL),'AngleCS'
366 jmc 1.36 CALL MDS_FACEF_READ_RS(fName,fp,18,angleSinC,bi,bj,myThid)
367 jmc 1.20 iL = ILNBLNK(tmpBuf)
368     WRITE(msgBuf,'(A,1X,A)') tmpBuf(1:iL),'AngleSN'
369 jmc 1.27 anglesAreSet = .TRUE.
370     ELSE
371     anglesAreSet = .FALSE.
372 jmc 1.20 ENDIF
373 jmc 1.36 #else /* ALLOW_MDSIO */
374     WRITE(msgBuf,'(2A)')
375     & 'INI_CURVILINEAR_GRID: Needs to compile MDSIO pkg'
376     CALL PRINT_ERROR( msgBuf, myThid )
377     STOP 'ABNORMAL END: S/R INI_CURVILINEAR_GRID'
378     #endif /* ALLOW_MDSIO */
379 jmc 1.8
380     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
381     & SQUEEZE_RIGHT , myThid)
382 jmc 1.7
383     ENDDO
384     ENDDO
385 edhill 1.18
386 jmc 1.46 _END_MASTER(myThid)
387    
388 jmc 1.30 #ifdef ALLOW_MNC
389     ENDIF
390     #endif /* ALLOW_MNC */
391    
392 jmc 1.28 CALL EXCH_XY_RS(xC,myThid)
393     CALL EXCH_XY_RS(yC,myThid)
394 jmc 1.31 CALL EXCH_UV_AGRID_3D_RS( dxF, dyF, .FALSE., 1, myThid )
395 jmc 1.28 CALL EXCH_XY_RS(rA,myThid )
396 jmc 1.31 CALL EXCH_Z_3D_RS( xG, 1, myThid )
397     CALL EXCH_Z_3D_RS( yG, 1, myThid )
398 jmc 1.39 CALL EXCH_UV_BGRID_3D_RS( dxV, dyU, .FALSE., 1, myThid)
399 jmc 1.31 CALL EXCH_Z_3D_RS( rAz, 1, myThid )
400 jmc 1.28 CALL EXCH_UV_XY_RS(dxC,dyC,.FALSE.,myThid)
401     CALL EXCH_UV_XY_RS(rAw,rAs,.FALSE.,myThid)
402     CALL EXCH_UV_XY_RS(dyG,dxG,.FALSE.,myThid)
403 jmc 1.7
404 dimitri 1.12 #endif /* OLD_GRID_IO */
405 jmc 1.7
406 jmc 1.46 C-- Calculate (sines and cosines of) angles of grid north with
407 mlosch 1.44 C-- geographical north when they have not been read from a file
408     IF ( .NOT.anglesAreSet ) THEN
409     CALL CALC_ANGLES( myThid )
410 jmc 1.45 _BARRIER
411     _BEGIN_MASTER(myThid)
412 mlosch 1.44 anglesAreSet = .TRUE.
413 jmc 1.45 _END_MASTER(myThid)
414 mlosch 1.44 ENDIF
415 jmc 1.45 C-- Exchange Angle (either loaded from file or computed)
416     CALL EXCH_UV_AGRID_3D_RS(angleSinC,angleCosC,.TRUE., 1, myThid)
417    
418 jmc 1.27 C-- Stop if Angle have not been loaded but are needed :
419     _BEGIN_MASTER(myThid)
420     IF ( .NOT.anglesAreSet .AND. use3dCoriolis ) THEN
421     WRITE(msgBuf,'(2A)')
422     & 'INI_CURVILINEAR_GRID: Angle of CurvilinearGrid not set',
423     & ' but needed for 3-D Coriolis'
424 jmc 1.36 CALL PRINT_ERROR( msgBuf, myThid )
425 jmc 1.27 STOP 'ABNORMAL END: S/R INI_CURVILINEAR_GRID'
426     ENDIF
427     _END_MASTER(myThid)
428    
429 jmc 1.41 c CALL WRITE_FULLARRAY_RL('dxV',dxV,1,0,0,1,0,myThid)
430     c CALL WRITE_FULLARRAY_RL('dyU',dyU,1,0,0,1,0,myThid)
431     c CALL WRITE_FULLARRAY_RL('rAz',rAz,1,0,0,1,0,myThid)
432     c CALL WRITE_FULLARRAY_RL('xG' ,xG ,1,0,0,1,0,myThid)
433     c CALL WRITE_FULLARRAY_RL('yG' ,yG ,1,0,0,1,0,myThid)
434 jmc 1.7
435 jmc 1.48 C-- Now let us look at all these beasts
436 dimitri 1.14 IF ( debugLevel .GE. debLevB ) THEN
437 jmc 1.32 CALL PLOT_FIELD_XYRS( xC , 'Current xC ', 0, myThid )
438     CALL PLOT_FIELD_XYRS( yC , 'Current yC ', 0, myThid )
439     CALL PLOT_FIELD_XYRS( dxF , 'Current dxF ', 0, myThid )
440     CALL PLOT_FIELD_XYRS( dyF , 'Current dyF ', 0, myThid )
441     CALL PLOT_FIELD_XYRS( rA , 'Current rA ', 0, myThid )
442     CALL PLOT_FIELD_XYRS( xG , 'Current xG ', 0, myThid )
443     CALL PLOT_FIELD_XYRS( yG , 'Current yG ', 0, myThid )
444     CALL PLOT_FIELD_XYRS( dxV , 'Current dxV ', 0, myThid )
445     CALL PLOT_FIELD_XYRS( dyU , 'Current dyU ', 0, myThid )
446     CALL PLOT_FIELD_XYRS( rAz , 'Current rAz ', 0, myThid )
447     CALL PLOT_FIELD_XYRS( dxC , 'Current dxC ', 0, myThid )
448     CALL PLOT_FIELD_XYRS( dyC , 'Current dyC ', 0, myThid )
449     CALL PLOT_FIELD_XYRS( rAw , 'Current rAw ', 0, myThid )
450     CALL PLOT_FIELD_XYRS( rAs , 'Current rAs ', 0, myThid )
451     CALL PLOT_FIELD_XYRS( dxG , 'Current dxG ', 0, myThid )
452     CALL PLOT_FIELD_XYRS( dyG , 'Current dyG ', 0, myThid )
453     CALL PLOT_FIELD_XYRS(angleCosC, 'Current AngleCS ', 0, myThid )
454     CALL PLOT_FIELD_XYRS(angleSinC, 'Current AngleSN ', 0, myThid )
455 dimitri 1.14 ENDIF
456 jmc 1.7
457     RETURN
458     END

  ViewVC Help
Powered by ViewVC 1.1.22