/[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.49 - (hide annotations) (download)
Tue Feb 22 18:36:47 2011 UTC (13 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62w, checkpoint62y, checkpoint62x
Changes since 1.48: +30 -1 lines
add new param to scale curvilinear grid distance and area when using
 a different rSphere.

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

  ViewVC Help
Powered by ViewVC 1.1.22