/[MITgcm]/MITgcm/pkg/mnc/mnc_cw_cvars.F
ViewVC logotype

Contents of /MITgcm/pkg/mnc/mnc_cw_cvars.F

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


Revision 1.8 - (show annotations) (download)
Tue Feb 5 13:38:45 2008 UTC (16 years, 4 months ago) by mlosch
Branch: MAIN
CVS Tags: checkpoint59q, checkpoint59p, checkpoint59o, checkpoint59n
Changes since 1.7: +7 -7 lines
make mnc_cw_cvars produce marginally useful coordinate variables for a
rotated grid

1 C $Header: /u/gcmpack/MITgcm/pkg/mnc/mnc_cw_cvars.F,v 1.7 2008/02/01 11:05:14 mlosch Exp $
2 C $Name: $
3
4 #include "MNC_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP 1
8 C !ROUTINE: MNC_CW_WRITE_CVAR
9
10 C !INTERFACE:
11 SUBROUTINE MNC_CW_WRITE_CVAR(
12 I fname,
13 I cvname,
14 I fid,
15 I did,
16 I bi, bj,
17 I myThid )
18
19 C !DESCRIPTION:
20 C Write a CF-convention coordinate variable (a vector).
21
22 C !USES:
23 implicit none
24 #include "netcdf.inc"
25 #include "mnc_common.h"
26 #include "SIZE.h"
27 #include "EEPARAMS.h"
28 #include "EESUPPORT.h"
29 #include "PARAMS.h"
30 #include "GRID.h"
31 #ifdef ALLOW_EXCH2
32 #include "W2_EXCH2_TOPOLOGY.h"
33 #include "W2_EXCH2_PARAMS.h"
34 #endif
35
36 C Functions
37 integer IFNBLNK, ILNBLNK
38
39 C !INPUT PARAMETERS:
40 character*(*) fname
41 character*(*) cvname
42 integer fid, did, bi,bj
43 integer myThid
44 CEOP
45
46 C !LOCAL VARIABLES:
47 integer i, vid, nnf, nnl, doit, err
48 integer nids, cv_did(1), xtmin,ytmin
49 character*(MAX_LEN_MBUF) msgbuf
50 integer cv_start(1), cv_count(1)
51 _RS rtmp(sNx + 2*OLx + sNy + 2*OLy + Nr)
52
53 nnf = IFNBLNK(cvname)
54 nnl = ILNBLNK(cvname)
55
56 xtmin = 0
57 ytmin = 0
58 #ifdef ALLOW_EXCH2
59 xtmin = exch2_tbasex(W2_myTileList(bi))
60 ytmin = exch2_tbasey(W2_myTileList(bi))
61 #endif
62 doit = 1
63 nids = 1
64 cv_did(1)= did
65
66 C Check all the coordinate variables that we know about
67 IF (cvname(nnf:nnl) .EQ. 'X') THEN
68
69 cv_start(1) = 1
70 cv_count(1) = sNx
71 #ifdef ALLOW_EXCH2
72 DO i = cv_start(1),cv_count(1)
73 rtmp(i) = xtmin + i
74 ENDDO
75 #else
76 IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
77 DO i = cv_start(1),cv_count(1)
78 rtmp(i) = xtmin + i
79 ENDDO
80 ELSE
81 DO i = cv_start(1),cv_count(1)
82 rtmp(i) = xC(i,1,bi,bj)
83 ENDDO
84 ENDIF
85 #endif
86
87 ELSEIF (cvname(nnf:nnl) .EQ. 'Xp1') THEN
88
89 cv_start(1) = 1
90 cv_count(1) = sNx + 1
91 #ifdef ALLOW_EXCH2
92 DO i = cv_start(1),cv_count(1)
93 rtmp(i) = xtmin + i
94 ENDDO
95 #else
96 IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
97 DO i = cv_start(1),cv_count(1)
98 rtmp(i) = xtmin + i
99 ENDDO
100 ELSE
101 DO i = cv_start(1),cv_count(1)
102 rtmp(i) = xG(i,1,bi,bj)
103 ENDDO
104 ENDIF
105 #endif
106
107 ELSEIF (cvname(nnf:nnl) .EQ. 'Xwh') THEN
108
109 cv_start(1) = 1
110 cv_count(1) = sNx + 2*OLx
111 #ifdef ALLOW_EXCH2
112 DO i = cv_start(1),cv_count(1)
113 rtmp(i) = xtmin + i
114 ENDDO
115 #else
116 IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
117 DO i = cv_start(1),cv_count(1)
118 rtmp(i) = xtmin - OLx + i
119 ENDDO
120 ELSE
121 DO i = cv_start(1),cv_count(1)
122 rtmp(i) = xC(i,1,bi,bj)
123 ENDDO
124 ENDIF
125 #endif
126
127 ELSEIF (cvname(nnf:nnl) .EQ. 'Y') THEN
128
129 cv_start(1) = 1
130 cv_count(1) = sNy
131 #ifdef ALLOW_EXCH2
132 DO i = cv_start(1),cv_count(1)
133 rtmp(i) = ytmin + i
134 ENDDO
135 #else
136 IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
137 DO i = cv_start(1),cv_count(1)
138 rtmp(i) = ytmin + i
139 ENDDO
140 ELSE
141 DO i = cv_start(1),cv_count(1)
142 rtmp(i) = yC(1,i,bi,bj)
143 ENDDO
144 ENDIF
145 #endif
146
147 ELSEIF (cvname(nnf:nnl) .EQ. 'Yp1') THEN
148
149 cv_start(1) = 1
150 cv_count(1) = sNy + 1
151 #ifdef ALLOW_EXCH2
152 DO i = cv_start(1),cv_count(1)
153 rtmp(i) = ytmin + i
154 ENDDO
155 #else
156 IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
157 DO i = cv_start(1),cv_count(1)
158 rtmp(i) = ytmin + i
159 ENDDO
160 ELSE
161 DO i = cv_start(1),cv_count(1)
162 rtmp(i) = yG(1,i,bi,bj)
163 ENDDO
164 ENDIF
165 #endif
166
167 ELSEIF (cvname(nnf:nnl) .EQ. 'Ywh') THEN
168
169 cv_start(1) = 1
170 cv_count(1) = sNy + 2*OLy
171 #ifdef ALLOW_EXCH2
172 DO i = cv_start(1),cv_count(1)
173 rtmp(i) = ytmin + i
174 ENDDO
175 #else
176 IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
177 DO i = cv_start(1),cv_count(1)
178 rtmp(i) = ytmin - OLy + i
179 ENDDO
180 ELSE
181 DO i = cv_start(1),cv_count(1)
182 rtmp(i) = yC(1,i-OLy,bi,bj)
183 ENDDO
184 ENDIF
185 #endif
186
187 ELSEIF (cvname(nnf:nnl) .EQ. 'Z') THEN
188
189 cv_start(1) = 1
190 cv_count(1) = Nr
191 DO i = cv_start(1),cv_count(1)
192 rtmp(i) = rC(i)
193 ENDDO
194
195 ELSEIF (cvname(nnf:nnl) .EQ. 'Zp1') THEN
196
197 cv_start(1) = 1
198 cv_count(1) = Nr + 1
199 DO i = cv_start(1),cv_count(1)
200 rtmp(i) = rF(i)
201 ENDDO
202
203 ELSEIF (cvname(nnf:nnl) .EQ. 'Zu') THEN
204
205 cv_start(1) = 1
206 cv_count(1) = Nr
207 DO i = cv_start(1),cv_count(1)
208 rtmp(i) = rF(i + 1)
209 ENDDO
210
211 ELSEIF (cvname(nnf:nnl) .EQ. 'Zl') THEN
212
213 cv_start(1) = 1
214 cv_count(1) = Nr
215 DO i = cv_start(1),cv_count(1)
216 rtmp(i) = rF(i)
217 ENDDO
218
219 ELSEIF (cvname(nnf:nnl) .EQ. 'Zm1') THEN
220
221 cv_start(1) = 1
222 cv_count(1) = Nr - 1
223 DO i = cv_start(1),cv_count(1)
224 rtmp(i) = rF(i + 1)
225 ENDDO
226
227 ELSE
228
229 doit = 0
230
231 ENDIF
232
233 IF ( doit .EQ. 1 ) THEN
234
235 CALL MNC_FILE_REDEF(fname, myThid)
236 err = NF_DEF_VAR(fid, cvname, NF_DOUBLE,
237 & nids, cv_did, vid)
238 i = ILNBLNK( fname )
239 write(msgbuf,'(5a)') 'defining coordinate variable ''',
240 & cvname(nnf:nnl), ''' in file ''', fname(1:i), ''''
241 CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
242 CALL MNC_FILE_ENDDEF(fname, myThid)
243 err = NF_PUT_VARA_DOUBLE(fid, vid,
244 & cv_start, cv_count, rtmp)
245 write(msgbuf,'(5a)') 'writing coordinate variable ''',
246 & cvname(nnf:nnl), ''' in file ''', fname(1:i), ''''
247 CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
248
249 ENDIF
250
251 RETURN
252 END
253
254 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
255

  ViewVC Help
Powered by ViewVC 1.1.22