/[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.3 - (show annotations) (download)
Sat Dec 18 19:42:39 2004 UTC (19 years, 5 months ago) by edhill
Branch: MAIN
Changes since 1.2: +20 -2 lines
 o coordinate variables for X,Y with "halos"

1 C $Header: /u/gcmpack/MITgcm/pkg/mnc/mnc_cw_cvars.F,v 1.2 2004/12/18 19:18:08 edhill Exp $
2 C $Name: $
3
4 #include "MNC_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 C CBOP 1
8 C C !ROUTINE: MNC_CW_DEF_CVAR
9
10 C C !INTERFACE:
11 C SUBROUTINE MNC_CW_DEF_CVAR(
12 C I cvname,
13 C I cvnum,
14 C I cvdat,
15 C I myThid )
16
17 C C !DESCRIPTION:
18 C C Store data for a CF-convention coordinate variable (a vector) for
19 C C the given dimension name.
20
21 C C !USES:
22 C implicit none
23 C #include "mnc_common.h"
24 C #include "EEPARAMS.h"
25
26 C C !INPUT PARAMETERS:
27 C character*(*) cvname
28 C _RL cvdat(*)
29 C integer cvnum, myThid
30 C CEOP
31
32 C C !LOCAL VARIABLES:
33 C integer i, imx, ind, nnf,nnl
34 C character*(MAX_LEN_MBUF) msgbuf
35
36 C C Functions
37 C integer IFNBLNK, ILNBLNK
38
39 C nnf = IFNBLNK(cvname)
40 C nnl = ILNBLNK(cvname)
41
42 C C Check that this name is not already defined
43 C CALL MNC_GET_IND(MNC_MAX_ID, cvname, mnc_cw_cvnm, ind, myThid)
44 C IF (ind .GT. 0) THEN
45 C write(msgbuf,'(3a)') 'MNC_CW_DEF_CVAR ERROR: ''',
46 C & cvname(nnf:nnl), ''' is already defined'
47 C CALL print_error(msgbuf, mythid)
48 C stop 'ABNORMAL END: S/R MNC_CW_DEF_CVAR'
49 C ENDIF
50 C CALL MNC_GET_NEXT_EMPTY_IND(MNC_MAX_ID, mnc_cw_cvnm,
51 C & ind, myThid)
52
53 C imx = 0
54 C DO i = 1,MNC_MAX_ID
55 C IF (mnc_cw_cvnm(i)(1:1) .NE. ' ') THEN
56 C imx = max(imx, mnc_cw_cvse(2,i))
57 C ENDIF
58 C ENDDO
59
60 C IF ((MNC_CW_CVDAT - imx - 1) .LT. cvnum) THEN
61 C write(msgbuf,'(3a)') 'MNC_CW_DEF_CVAR ERROR: out of space',
62 C & '--please increase size of MNC_CW_CVDAT in the file ',
63 C & '''mnc_common.h'''
64 C CALL print_error(msgbuf, mythid)
65 C stop 'ABNORMAL END: S/R MNC_CW_DEF_CVAR'
66 C ENDIF
67
68 C DO i = 1,cvnum
69 C mnc_cw_cvdt(imx+i) = cvdat(i)
70 C ENDDO
71 C mnc_cw_cvse(1,ind) = imx + 1
72 C mnc_cw_cvse(2,ind) = imx + cvnum
73
74 C RETURN
75 C END
76
77 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
78 CBOP 1
79 C !ROUTINE: MNC_CW_WRITE_CVAR
80
81 C !INTERFACE:
82 SUBROUTINE MNC_CW_WRITE_CVAR(
83 I fname,
84 I cvname,
85 I fid,
86 I did,
87 I bi, bj,
88 I myThid )
89
90 C !DESCRIPTION:
91 C Write a CF-convention coordinate variable (a vector).
92
93 C !USES:
94 implicit none
95 #include "netcdf.inc"
96 #include "mnc_common.h"
97 #include "SIZE.h"
98 #include "EEPARAMS.h"
99 #include "EESUPPORT.h"
100 #include "PARAMS.h"
101 #include "GRID.h"
102
103 C !INPUT PARAMETERS:
104 character*(*) fname
105 character*(*) cvname
106 integer fid, did, bi,bj
107 integer myThid
108 CEOP
109
110 C !LOCAL VARIABLES:
111 integer i, vid, nnf,nnl, doit, err
112 integer nids, cv_did(1)
113 character*(MAX_LEN_MBUF) msgbuf
114 integer cv_start(1), cv_count(1)
115 _RS rtmp(sNx + 2*OLx + sNy + 2*OLy + Nr)
116
117 C Functions
118 integer IFNBLNK, ILNBLNK
119
120 nnf = IFNBLNK(cvname)
121 nnl = ILNBLNK(cvname)
122
123 doit = 0
124 nids = 1
125 cv_did(1)= did
126
127 C Check all the coordinate variables that we know about
128 IF (cvname(nnf:nnl) .EQ. 'X') THEN
129
130 cv_start(1) = 1
131 cv_count(1) = sNx
132 DO i = cv_start(1),cv_count(1)
133 rtmp(i) = xC(i,1,bi,bj)
134 ENDDO
135 doit = 1
136
137 ELSEIF (cvname(nnf:nnl) .EQ. 'Xp1') THEN
138
139 cv_start(1) = 1
140 cv_count(1) = sNx + 1
141 DO i = cv_start(1),cv_count(1)
142 rtmp(i) = xG(i,1,bi,bj)
143 ENDDO
144 doit = 1
145
146 ELSEIF (cvname(nnf:nnl) .EQ. 'Xwh') THEN
147
148 cv_start(1) = 1
149 cv_count(1) = sNx + 2*OLx
150 DO i = cv_start(1),cv_count(1)
151 rtmp(i) = xC(i,1,bi,bj)
152 ENDDO
153 doit = 1
154
155 ELSEIF (cvname(nnf:nnl) .EQ. 'Y') THEN
156
157 cv_start(1) = 1
158 cv_count(1) = sNy
159 DO i = cv_start(1),cv_count(1)
160 rtmp(i) = yC(1,i,bi,bj)
161 ENDDO
162 doit = 1
163
164 ELSEIF (cvname(nnf:nnl) .EQ. 'Yp1') THEN
165
166 cv_start(1) = 1
167 cv_count(1) = sNy + 1
168 DO i = cv_start(1),cv_count(1)
169 rtmp(i) = yG(1,i,bi,bj)
170 ENDDO
171 doit = 1
172
173 ELSEIF (cvname(nnf:nnl) .EQ. 'Ywh') THEN
174
175 cv_start(1) = 1
176 cv_count(1) = sNy + 2*OLy
177 DO i = cv_start(1),cv_count(1)
178 rtmp(i) = yC(1,i-OLy,bi,bj)
179 ENDDO
180 doit = 1
181
182 ELSEIF (cvname(nnf:nnl) .EQ. 'Z') THEN
183
184 cv_start(1) = 1
185 cv_count(1) = Nr
186 DO i = cv_start(1),cv_count(1)
187 rtmp(i) = rC(i)
188 ENDDO
189 doit = 1
190
191 ELSEIF (cvname(nnf:nnl) .EQ. 'Zp1') THEN
192
193 cv_start(1) = 1
194 cv_count(1) = Nr + 1
195 DO i = cv_start(1),cv_count(1)
196 rtmp(i) = rF(i)
197 ENDDO
198 doit = 1
199
200 ENDIF
201
202 IF ( doit .EQ. 1 ) THEN
203
204 CALL MNC_FILE_REDEF(fname, myThid)
205 err = NF_DEF_VAR(fid, cvname, NF_DOUBLE,
206 & nids, cv_did, vid)
207 write(msgbuf,'(5a)') 'defining coordinate variable ''',
208 & cvname(nnf:nnl), ''' in file ''', fname, ''''
209 CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
210 CALL MNC_FILE_ENDDEF(fname, myThid)
211 err = NF_PUT_VARA_DOUBLE(fid, vid,
212 & cv_start, cv_count, rtmp)
213 write(msgbuf,'(5a)') 'writing coordinate variable ''',
214 & cvname(nnf:nnl), ''' in file ''', fname, ''''
215 CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
216
217 ENDIF
218
219 RETURN
220 END
221
222 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
223

  ViewVC Help
Powered by ViewVC 1.1.22