/[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.4 - (show annotations) (download)
Mon Dec 20 17:10:27 2004 UTC (19 years, 5 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint57d_post, checkpoint57b_post, checkpoint57c_pre, checkpoint57c_post
Changes since 1.3: +46 -87 lines
o fix MNC coordinate variables so that they now contain per-face index
  values (instead of xC,xG,yC,yG values) when run with EXCH2 since, in
  general, EXCH2 grids are only aligned to a "local" coordinate system

1 C $Header: /u/gcmpack/MITgcm/pkg/mnc/mnc_cw_cvars.F,v 1.3 2004/12/18 19:42:39 edhill 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,j, 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 DO i = cv_start(1),cv_count(1)
72 #ifdef ALLOW_EXCH2
73 rtmp(i) = xtmin + i
74 #else
75 rtmp(i) = xC(i,1,bi,bj)
76 #endif
77 ENDDO
78
79 ELSEIF (cvname(nnf:nnl) .EQ. 'Xp1') THEN
80
81 cv_start(1) = 1
82 cv_count(1) = sNx + 1
83 DO i = cv_start(1),cv_count(1)
84 #ifdef ALLOW_EXCH2
85 rtmp(i) = xtmin + i
86 #else
87 rtmp(i) = xG(i,1,bi,bj)
88 #endif
89 ENDDO
90
91 ELSEIF (cvname(nnf:nnl) .EQ. 'Xwh') THEN
92
93 cv_start(1) = 1
94 cv_count(1) = sNx + 2*OLx
95 DO i = cv_start(1),cv_count(1)
96 #ifdef ALLOW_EXCH2
97 rtmp(i) = xtmin - OLx + i
98 #else
99 rtmp(i) = xC(i,1,bi,bj)
100 #endif
101 ENDDO
102
103 ELSEIF (cvname(nnf:nnl) .EQ. 'Y') THEN
104
105 cv_start(1) = 1
106 cv_count(1) = sNy
107 DO i = cv_start(1),cv_count(1)
108 #ifdef ALLOW_EXCH2
109 rtmp(i) = ytmin + i
110 #else
111 rtmp(i) = yC(1,i,bi,bj)
112 #endif
113 ENDDO
114
115 ELSEIF (cvname(nnf:nnl) .EQ. 'Yp1') THEN
116
117 cv_start(1) = 1
118 cv_count(1) = sNy + 1
119 DO i = cv_start(1),cv_count(1)
120 #ifdef ALLOW_EXCH2
121 rtmp(i) = ytmin + i
122 #else
123 rtmp(i) = yG(1,i,bi,bj)
124 #endif
125 ENDDO
126
127 ELSEIF (cvname(nnf:nnl) .EQ. 'Ywh') THEN
128
129 cv_start(1) = 1
130 cv_count(1) = sNy + 2*OLy
131 DO i = cv_start(1),cv_count(1)
132 #ifdef ALLOW_EXCH2
133 rtmp(i) = ytmin - OLy + i
134 #else
135 rtmp(i) = yC(1,i-OLy,bi,bj)
136 #endif
137 ENDDO
138
139 ELSEIF (cvname(nnf:nnl) .EQ. 'Z') THEN
140
141 cv_start(1) = 1
142 cv_count(1) = Nr
143 DO i = cv_start(1),cv_count(1)
144 rtmp(i) = rC(i)
145 ENDDO
146
147 ELSEIF (cvname(nnf:nnl) .EQ. 'Zp1') THEN
148
149 cv_start(1) = 1
150 cv_count(1) = Nr + 1
151 DO i = cv_start(1),cv_count(1)
152 rtmp(i) = rF(i)
153 ENDDO
154
155 ELSE
156
157 doit = 0
158
159 ENDIF
160
161 IF ( doit .EQ. 1 ) THEN
162
163 CALL MNC_FILE_REDEF(fname, myThid)
164 err = NF_DEF_VAR(fid, cvname, NF_DOUBLE,
165 & nids, cv_did, vid)
166 write(msgbuf,'(5a)') 'defining coordinate variable ''',
167 & cvname(nnf:nnl), ''' in file ''', fname, ''''
168 CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
169 CALL MNC_FILE_ENDDEF(fname, myThid)
170 err = NF_PUT_VARA_DOUBLE(fid, vid,
171 & cv_start, cv_count, rtmp)
172 write(msgbuf,'(5a)') 'writing coordinate variable ''',
173 & cvname(nnf:nnl), ''' in file ''', fname, ''''
174 CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
175
176 ENDIF
177
178 RETURN
179 END
180
181 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
182

  ViewVC Help
Powered by ViewVC 1.1.22