/[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.3 - (hide 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 edhill 1.3 C $Header: /u/gcmpack/MITgcm/pkg/mnc/mnc_cw_cvars.F,v 1.2 2004/12/18 19:18:08 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     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 edhill 1.3 _RS rtmp(sNx + 2*OLx + sNy + 2*OLy + Nr)
116 edhill 1.1
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 edhill 1.3 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 edhill 1.1 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 edhill 1.3 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 edhill 1.1 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