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

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

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


Revision 1.7 - (hide annotations) (download)
Fri Feb 1 11:05:14 2008 UTC (16 years, 3 months ago) by mlosch
Branch: MAIN
Changes since 1.6: +68 -20 lines
have mnc create marginally meaning full coordinate variables if
usingCurvilinearGrid and NOT EXCH2 (that is the grid indices)

1 mlosch 1.7 C $Header: /u/gcmpack/MITgcm/pkg/mnc/mnc_cw_cvars.F,v 1.6 2006/03/10 16:09:31 edhill Exp $
2 edhill 1.1 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 edhill 1.4 #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 edhill 1.1
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 mlosch 1.7 integer i, vid, nnf, nnl, doit, err
48 edhill 1.4 integer nids, cv_did(1), xtmin,ytmin
49 edhill 1.1 character*(MAX_LEN_MBUF) msgbuf
50     integer cv_start(1), cv_count(1)
51 edhill 1.3 _RS rtmp(sNx + 2*OLx + sNy + 2*OLy + Nr)
52 edhill 1.1
53     nnf = IFNBLNK(cvname)
54     nnl = ILNBLNK(cvname)
55    
56 edhill 1.4 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 edhill 1.1 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 mlosch 1.7 #ifdef ALLOW_EXCH2
72 edhill 1.1 DO i = cv_start(1),cv_count(1)
73 mlosch 1.7 rtmp(i) = xtmin + i
74     ENDDO
75     #else
76     IF ( usingCurvilinearGrid ) THEN
77     DO i = cv_start(1),cv_count(1)
78 edhill 1.4 rtmp(i) = xtmin + i
79 mlosch 1.7 ENDDO
80     ELSE
81     DO i = cv_start(1),cv_count(1)
82 edhill 1.1 rtmp(i) = xC(i,1,bi,bj)
83 mlosch 1.7 ENDDO
84     ENDIF
85 edhill 1.4 #endif
86 edhill 1.1
87     ELSEIF (cvname(nnf:nnl) .EQ. 'Xp1') THEN
88    
89     cv_start(1) = 1
90     cv_count(1) = sNx + 1
91 mlosch 1.7 #ifdef ALLOW_EXCH2
92 edhill 1.1 DO i = cv_start(1),cv_count(1)
93 mlosch 1.7 rtmp(i) = xtmin + i
94     ENDDO
95     #else
96     IF ( usingCurvilinearGrid ) THEN
97     DO i = cv_start(1),cv_count(1)
98 edhill 1.4 rtmp(i) = xtmin + i
99 mlosch 1.7 ENDDO
100     ELSE
101     DO i = cv_start(1),cv_count(1)
102 edhill 1.1 rtmp(i) = xG(i,1,bi,bj)
103 mlosch 1.7 ENDDO
104     ENDIF
105 edhill 1.4 #endif
106 edhill 1.1
107 edhill 1.3 ELSEIF (cvname(nnf:nnl) .EQ. 'Xwh') THEN
108    
109     cv_start(1) = 1
110     cv_count(1) = sNx + 2*OLx
111 mlosch 1.7 #ifdef ALLOW_EXCH2
112 edhill 1.3 DO i = cv_start(1),cv_count(1)
113 mlosch 1.7 rtmp(i) = xtmin + i
114     ENDDO
115     #else
116     IF ( usingCurvilinearGrid ) THEN
117     DO i = cv_start(1),cv_count(1)
118 edhill 1.4 rtmp(i) = xtmin - OLx + i
119 mlosch 1.7 ENDDO
120     ELSE
121     DO i = cv_start(1),cv_count(1)
122 edhill 1.3 rtmp(i) = xC(i,1,bi,bj)
123 mlosch 1.7 ENDDO
124     ENDIF
125 edhill 1.4 #endif
126    
127 edhill 1.1 ELSEIF (cvname(nnf:nnl) .EQ. 'Y') THEN
128    
129     cv_start(1) = 1
130     cv_count(1) = sNy
131 mlosch 1.7 #ifdef ALLOW_EXCH2
132 edhill 1.1 DO i = cv_start(1),cv_count(1)
133 mlosch 1.7 rtmp(i) = ytmin + i
134     ENDDO
135     #else
136     IF ( usingCurvilinearGrid ) THEN
137     DO i = cv_start(1),cv_count(1)
138 edhill 1.4 rtmp(i) = ytmin + i
139 mlosch 1.7 ENDDO
140     ELSE
141     DO i = cv_start(1),cv_count(1)
142 edhill 1.1 rtmp(i) = yC(1,i,bi,bj)
143 mlosch 1.7 ENDDO
144     ENDIF
145 edhill 1.4 #endif
146 edhill 1.1
147     ELSEIF (cvname(nnf:nnl) .EQ. 'Yp1') THEN
148    
149     cv_start(1) = 1
150     cv_count(1) = sNy + 1
151 mlosch 1.7 #ifdef ALLOW_EXCH2
152 edhill 1.1 DO i = cv_start(1),cv_count(1)
153 mlosch 1.7 rtmp(i) = ytmin + i
154     ENDDO
155     #else
156     IF ( usingCurvilinearGrid ) THEN
157     DO i = cv_start(1),cv_count(1)
158 edhill 1.4 rtmp(i) = ytmin + i
159 mlosch 1.7 ENDDO
160     ELSE
161     DO i = cv_start(1),cv_count(1)
162 edhill 1.1 rtmp(i) = yG(1,i,bi,bj)
163 mlosch 1.7 ENDDO
164     ENDIF
165 edhill 1.4 #endif
166 edhill 1.1
167 edhill 1.3 ELSEIF (cvname(nnf:nnl) .EQ. 'Ywh') THEN
168    
169     cv_start(1) = 1
170     cv_count(1) = sNy + 2*OLy
171 mlosch 1.7 #ifdef ALLOW_EXCH2
172 edhill 1.3 DO i = cv_start(1),cv_count(1)
173 mlosch 1.7 rtmp(i) = ytmin + i
174     ENDDO
175     #else
176     IF ( usingCurvilinearGrid ) THEN
177     DO i = cv_start(1),cv_count(1)
178 edhill 1.4 rtmp(i) = ytmin - OLy + i
179 mlosch 1.7 ENDDO
180     ELSE
181     DO i = cv_start(1),cv_count(1)
182 edhill 1.3 rtmp(i) = yC(1,i-OLy,bi,bj)
183 mlosch 1.7 ENDDO
184     ENDIF
185 edhill 1.4 #endif
186 edhill 1.3
187 edhill 1.1 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 edhill 1.4
203 edhill 1.5 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 edhill 1.4 ELSE
228    
229     doit = 0
230 edhill 1.1
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 edhill 1.6 i = ILNBLNK( fname )
239 edhill 1.1 write(msgbuf,'(5a)') 'defining coordinate variable ''',
240 edhill 1.6 & cvname(nnf:nnl), ''' in file ''', fname(1:i), ''''
241 edhill 1.1 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 edhill 1.6 & cvname(nnf:nnl), ''' in file ''', fname(1:i), ''''
247 edhill 1.1 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