1 |
dimitri |
1.1 |
! |
2 |
|
|
! $Id: write_nc_MaskAreaBathy.F,v 1.1.1.1 2003/05/01 21:25:53 fletcher Exp $ |
3 |
|
|
! |
4 |
|
|
!_ --------------------------------------------------------------------- |
5 |
|
|
!_ RCS lines preceded by "c_ " |
6 |
|
|
!_ --------------------------------------------------------------------- |
7 |
|
|
!_ |
8 |
|
|
!_ $Source: /usr/data/cvsroot/fletcher/MOM_3/MOM_3/ocmip2/write_nc_MaskAreaBathy.F,v $ |
9 |
|
|
!_ $Revision: 1.1.1.1 $ |
10 |
|
|
!_ $Date: 2003/05/01 21:25:53 $ ; $State: Exp $ |
11 |
|
|
!_ $Author: fletcher $ ; $Locker: $ |
12 |
|
|
!_ |
13 |
|
|
!_ --------------------------------------------------------------------- |
14 |
|
|
!_ $Log: write_nc_MaskAreaBathy.F,v $ |
15 |
|
|
!_ Revision 1.1.1.1 2003/05/01 21:25:53 fletcher |
16 |
|
|
!_ Added code to write inversion variables |
17 |
|
|
!_ |
18 |
|
|
!_ Revision 1.1.1.1 2001/01/23 23:01:05 frenzel |
19 |
|
|
!_ MOM 3 Sources from Rick Slater |
20 |
|
|
!_ |
21 |
|
|
!_ Revision 1.2 1999/11/18 17:12:03 rdslater |
22 |
|
|
!_ Cosmetic changes: change cmoment character to "!", add $Id string at |
23 |
|
|
!_ top, remove *4 specifier on type statements. |
24 |
|
|
!_ |
25 |
|
|
!_ Revision 1.1.1.1 1999/05/19 15:40:41 rdslater |
26 |
|
|
!_ Imported sources: OCN19 OCMIP2 CFC runs |
27 |
|
|
!_ |
28 |
|
|
!_ Revision 2.1 1999/04/29 11:44:58 orr |
29 |
|
|
!_ Now GDT 1.2 compatible!!! |
30 |
|
|
!_ Added argument "production" |
31 |
|
|
!_ |
32 |
|
|
!_ Revision 1.3 1998/09/10 09:22:26 brocksce |
33 |
|
|
!_ Add missing value attribute for BATHY variable. |
34 |
|
|
!_ |
35 |
|
|
!_ Revision 1.2 1998/08/26 12:09:12 brocksce |
36 |
|
|
!_ Fixed convention error on two-dimensional bound arrays |
37 |
|
|
!_ (confusion between C and FORTRAN notations). |
38 |
|
|
!_ |
39 |
|
|
!_ Revision 1.1 1998/07/21 16:55:54 jomce |
40 |
|
|
!_ Initial revision |
41 |
|
|
!_ |
42 |
|
|
!_ --------------------------------------------------------------------- |
43 |
|
|
!_ |
44 |
|
|
|
45 |
|
|
!*********************************************************************** |
46 |
|
|
! |
47 |
|
|
! NAME: WRITE_NC_MaskAreaBathy |
48 |
|
|
! |
49 |
|
|
! INPUT: |
50 |
|
|
! group= group code (ex: IPSL) |
51 |
|
|
! production= production (model and version ex: OPA 8.1) |
52 |
|
|
! imt= dimension |
53 |
|
|
! jmt= dimension |
54 |
|
|
! kmt= dimension |
55 |
|
|
! lon= longitude axis [degrees East] |
56 |
|
|
! bounds_lon= boundaries array [degrees East] |
57 |
|
|
! = bounds_lon(i,j,1,1) represents the lower left boundary |
58 |
|
|
! = bounds_lon(i,j,2,1) represents the lower right boundary |
59 |
|
|
! = bounds_lon(i,j,1,2) represents the upper left boundary |
60 |
|
|
! = bounds_lon(i,j,2,2) represents the upper right boundary |
61 |
|
|
! lat= latitude axis [degrees North] |
62 |
|
|
! bounds_lat= boundaries array [degrees North] |
63 |
|
|
! = bounds_lat(i,j,1,1) represents the lower left boundary |
64 |
|
|
! = bounds_lat(i,j,2,1) represents the lower right boundary |
65 |
|
|
! = bounds_lat(i,j,1,2) represents the upper left boundary |
66 |
|
|
! = bounds_lat(i,j,2,2) represents the upper right boundary |
67 |
|
|
! depth= depth axis [meters] |
68 |
|
|
! bounds_depth= boundaries array [meters] |
69 |
|
|
! = bounds_dept(k,1) represents the lower boundary |
70 |
|
|
! = bounds_dept(k,2) represents the upper boundary |
71 |
|
|
! |
72 |
|
|
! MASK= Mask Land/Ocean at tracer points [0/1] |
73 |
|
|
! AREA= Surface Area of tracer cells [m^2] |
74 |
|
|
! BATHY= Bathymetry [m] |
75 |
|
|
! REG_AREA = Area of each dye region |
76 |
|
|
! |
77 |
|
|
! OUTPUT FILE: |
78 |
|
|
! A netcdf file (clobbed if exists) with |
79 |
|
|
! the filename group_MaskAreaBathy.nc |
80 |
|
|
! |
81 |
|
|
!*********************************************************************** |
82 |
|
|
|
83 |
|
|
SUBROUTINE WRITE_NC_MaskAreaBathy( |
84 |
|
|
& group,production, |
85 |
|
|
& imt,jmt,kmt,ndyetrac, |
86 |
|
|
& lon,bounds_lon,lat,bounds_lat,depth,bounds_depth, |
87 |
|
|
& MASK,AREA,BATHY,REGION_MASK,REGION_AREA) |
88 |
|
|
|
89 |
|
|
! No implicit declarations |
90 |
|
|
IMPLICIT NONE |
91 |
|
|
|
92 |
|
|
! Arguments |
93 |
|
|
CHARACTER*(*) group |
94 |
|
|
CHARACTER*(*) production |
95 |
|
|
INTEGER imt,jmt,kmt,ndyetrac |
96 |
|
|
REAL lon(imt,jmt),bounds_lon(imt,jmt,2,2) |
97 |
|
|
REAL lat(imt,jmt),bounds_lat(imt,jmt,2,2) |
98 |
|
|
REAL depth(kmt),bounds_depth(kmt,2) |
99 |
|
|
REAL MASK(imt,jmt,kmt) |
100 |
|
|
REAL AREA(imt,jmt) |
101 |
|
|
REAL BATHY(imt,jmt) |
102 |
|
|
REAL REGION_MASK(imt,jmt,ndyetrac) |
103 |
|
|
REAL REGION_AREA(ndyetrac) |
104 |
|
|
|
105 |
|
|
|
106 |
|
|
! Constants |
107 |
|
|
REAL missing_value |
108 |
|
|
PARAMETER (missing_value=-1.E+34) |
109 |
|
|
|
110 |
|
|
! Local variables |
111 |
|
|
CHARACTER*256 string256,filename |
112 |
|
|
|
113 |
|
|
! Function |
114 |
|
|
! INTEGER LEN_TRIM |
115 |
|
|
|
116 |
|
|
! NetCDF variables |
117 |
|
|
#include "netcdf.inc" |
118 |
|
|
INTEGER NC_ID |
119 |
|
|
INTEGER STATUS |
120 |
|
|
INTEGER LON_DIM,LON_ID |
121 |
|
|
INTEGER LAT_DIM,LAT_ID |
122 |
|
|
INTEGER DEPTH_DIM,DEPTH_ID |
123 |
|
|
INTEGER DYE_DIM, DYE_ID |
124 |
|
|
INTEGER TWO_DIM |
125 |
|
|
INTEGER BOUNDS_LON_ID |
126 |
|
|
INTEGER BOUNDS_LAT_ID |
127 |
|
|
INTEGER BOUNDS_DEPTH_ID |
128 |
|
|
INTEGER MASK_ID,AREA_ID,BATHY_ID, REG_MASK_ID, REG_AREA_ID |
129 |
|
|
INTEGER DIMS_2D(2) |
130 |
|
|
INTEGER DIMS_3D(3) |
131 |
|
|
INTEGER DIMS_4D(4) |
132 |
|
|
INTEGER DIMS_3D_REG(3) |
133 |
|
|
|
134 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
135 |
|
|
! Build the NetCDF filename |
136 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
137 |
|
|
filename=group//'_MaskAreaBathy.nc' |
138 |
|
|
|
139 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
140 |
|
|
! Open the NetCDF file |
141 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
142 |
|
|
STATUS=NF_CREATE(filename,NF_CLOBBER,NC_ID) |
143 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
144 |
|
|
|
145 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
146 |
|
|
! Define dimensions |
147 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
148 |
|
|
STATUS=NF_DEF_DIM(NC_ID,'x',imt,LON_DIM) |
149 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
150 |
|
|
|
151 |
|
|
STATUS=NF_DEF_DIM(NC_ID,'y',jmt,LAT_DIM) |
152 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
153 |
|
|
|
154 |
|
|
STATUS=NF_DEF_DIM(NC_ID,'depth',kmt,DEPTH_DIM) |
155 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
156 |
|
|
|
157 |
|
|
STATUS=NF_DEF_DIM(NC_ID,'dye',ndyetrac,DYE_DIM) |
158 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
159 |
|
|
|
160 |
|
|
STATUS=NF_DEF_DIM(NC_ID,'two',2,TWO_DIM) |
161 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
162 |
|
|
|
163 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
164 |
|
|
! Define variables |
165 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
166 |
|
|
DIMS_2D(1)=LON_DIM |
167 |
|
|
DIMS_2D(2)=LAT_DIM |
168 |
|
|
STATUS=NF_DEF_VAR(NC_ID,'lon',NF_FLOAT, |
169 |
|
|
& 2,DIMS_2D,LON_ID) |
170 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
171 |
|
|
|
172 |
|
|
!--------------------------------------------------------- |
173 |
|
|
DIMS_4D(1)=LON_DIM |
174 |
|
|
DIMS_4D(2)=LAT_DIM |
175 |
|
|
DIMS_4D(3)=TWO_DIM |
176 |
|
|
DIMS_4D(4)=TWO_DIM |
177 |
|
|
STATUS=NF_DEF_VAR(NC_ID,'bounds_lon',NF_FLOAT, |
178 |
|
|
& 4,DIMS_4D,BOUNDS_LON_ID) |
179 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
180 |
|
|
|
181 |
|
|
!--------------------------------------------------------- |
182 |
|
|
STATUS=NF_DEF_VAR(NC_ID,'lat',NF_FLOAT, |
183 |
|
|
& 2,DIMS_2D,LAT_ID) |
184 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
185 |
|
|
|
186 |
|
|
!--------------------------------------------------------- |
187 |
|
|
STATUS=NF_DEF_VAR(NC_ID,'bounds_lat',NF_FLOAT, |
188 |
|
|
& 4,DIMS_4D,BOUNDS_LAT_ID) |
189 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
190 |
|
|
|
191 |
|
|
!--------------------------------------------------------- |
192 |
|
|
STATUS=NF_DEF_VAR(NC_ID,'depth',NF_FLOAT, |
193 |
|
|
& 1,DEPTH_DIM,DEPTH_ID) |
194 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
195 |
|
|
|
196 |
|
|
!--------------------------------------------------------- |
197 |
|
|
DIMS_2D(1)=DEPTH_DIM |
198 |
|
|
DIMS_2D(2)=TWO_DIM |
199 |
|
|
STATUS=NF_DEF_VAR(NC_ID,'bounds_depth',NF_FLOAT, |
200 |
|
|
& 2,DIMS_2D,BOUNDS_DEPTH_ID) |
201 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
202 |
|
|
|
203 |
|
|
!--------------------------------------------------------- |
204 |
|
|
DIMS_3D(1)=LON_DIM |
205 |
|
|
DIMS_3D(2)=LAT_DIM |
206 |
|
|
DIMS_3D(3)=DEPTH_DIM |
207 |
|
|
STATUS=NF_DEF_VAR(NC_ID,'MASK',NF_FLOAT, |
208 |
|
|
& 3,DIMS_3D,MASK_ID) |
209 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
210 |
|
|
|
211 |
|
|
!--------------------------------------------------------- |
212 |
|
|
DIMS_2D(1)=LON_DIM |
213 |
|
|
DIMS_2D(2)=LAT_DIM |
214 |
|
|
STATUS=NF_DEF_VAR(NC_ID,'AREA',NF_FLOAT, |
215 |
|
|
& 2,DIMS_2D,AREA_ID) |
216 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
217 |
|
|
|
218 |
|
|
!--------------------------------------------------------- |
219 |
|
|
DIMS_2D(1)=LON_DIM |
220 |
|
|
DIMS_2D(2)=LAT_DIM |
221 |
|
|
STATUS=NF_DEF_VAR(NC_ID,'BATHY',NF_FLOAT, |
222 |
|
|
& 2,DIMS_2D,BATHY_ID) |
223 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
224 |
|
|
|
225 |
|
|
!--------------------------------------------------------- |
226 |
|
|
DIMS_3D_REG(1)=LON_DIM |
227 |
|
|
DIMS_3D_REG(2)=LAT_DIM |
228 |
|
|
DIMS_3D_REG(3)=DYE_DIM |
229 |
|
|
STATUS=NF_DEF_VAR(NC_ID,'REGION_MASK',NF_FLOAT, |
230 |
|
|
& 3,DIMS_3D_REG,REG_MASK_ID) |
231 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
232 |
|
|
|
233 |
|
|
!--------------------------------------------------------- |
234 |
|
|
STATUS=NF_DEF_VAR(NC_ID,'REGION_AREA', NF_FLOAT, |
235 |
|
|
& 1,DYE_DIM, REG_AREA_ID) |
236 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
237 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
238 |
|
|
! Define global attributes |
239 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
240 |
|
|
string256='GDT 1.2' |
241 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'Conventions', |
242 |
|
|
& LEN_TRIM(string256),string256) |
243 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
244 |
|
|
|
245 |
|
|
!--------------------------------------------------------- |
246 |
|
|
string256=filename |
247 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'file_name', |
248 |
|
|
& LEN_TRIM(string256),string256) |
249 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
250 |
|
|
|
251 |
|
|
!--------------------------------------------------------- |
252 |
|
|
string256=group//'_grid.nc' |
253 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'associate_file', |
254 |
|
|
& LEN_TRIM(string256),string256) |
255 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
256 |
|
|
|
257 |
|
|
!--------------------------------------------------------- |
258 |
|
|
string256='Ocean Inversion' |
259 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'project', |
260 |
|
|
& LEN_TRIM(string256),string256) |
261 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
262 |
|
|
|
263 |
|
|
!--------------------------------------------------------- |
264 |
|
|
string256=group |
265 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'institution', |
266 |
|
|
& LEN_TRIM(string256),string256) |
267 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
268 |
|
|
|
269 |
|
|
!--------------------------------------------------------- |
270 |
|
|
string256=production |
271 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'production', |
272 |
|
|
& LEN_TRIM(string256),string256) |
273 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
274 |
|
|
|
275 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
276 |
|
|
! Define variable attributes |
277 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
278 |
|
|
string256='Longitude' |
279 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,LON_ID,'long_name', |
280 |
|
|
& LEN_TRIM(string256),string256) |
281 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
282 |
|
|
|
283 |
|
|
string256='degrees_east' |
284 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,LON_ID,'units', |
285 |
|
|
& LEN_TRIM(string256),string256) |
286 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
287 |
|
|
|
288 |
|
|
STATUS=NF_PUT_ATT_REAL(NC_ID,LON_ID,'modulo', |
289 |
|
|
& NF_FLOAT,1,360.0) |
290 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
291 |
|
|
|
292 |
|
|
string256='circular' |
293 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,LON_ID,'topology', |
294 |
|
|
& LEN_TRIM(string256),string256) |
295 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
296 |
|
|
|
297 |
|
|
string256='bounds_lon' |
298 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,LON_ID,'bounds', |
299 |
|
|
& LEN_TRIM(string256),string256) |
300 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
301 |
|
|
|
302 |
|
|
!--------------------------------------------------------- |
303 |
|
|
string256='Latitude' |
304 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,LAT_ID,'long_name', |
305 |
|
|
& LEN_TRIM(string256),string256) |
306 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
307 |
|
|
|
308 |
|
|
string256='degrees_north' |
309 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,LAT_ID,'units', |
310 |
|
|
& LEN_TRIM(string256),string256) |
311 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
312 |
|
|
|
313 |
|
|
string256='bounds_lat' |
314 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,LAT_ID,'bounds', |
315 |
|
|
& LEN_TRIM(string256),string256) |
316 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
317 |
|
|
|
318 |
|
|
!--------------------------------------------------------- |
319 |
|
|
string256='Depth below the surface' |
320 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,DEPTH_ID,'long_name', |
321 |
|
|
& LEN_TRIM(string256),string256) |
322 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
323 |
|
|
|
324 |
|
|
string256='meters' |
325 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,DEPTH_ID,'units', |
326 |
|
|
& LEN_TRIM(string256),string256) |
327 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
328 |
|
|
|
329 |
|
|
string256='down' |
330 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,DEPTH_ID,'positive', |
331 |
|
|
& LEN_TRIM(string256),string256) |
332 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
333 |
|
|
|
334 |
|
|
string256='bounds_depth' |
335 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,DEPTH_ID,'bounds', |
336 |
|
|
& LEN_TRIM(string256),string256) |
337 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
338 |
|
|
|
339 |
|
|
!--------------------------------------------------------- |
340 |
|
|
string256='Mask Land/Ocean' |
341 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,MASK_ID,'long_name', |
342 |
|
|
& LEN_TRIM(string256),string256) |
343 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
344 |
|
|
|
345 |
|
|
string256='0/1' |
346 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,MASK_ID,'units', |
347 |
|
|
& LEN_TRIM(string256),string256) |
348 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
349 |
|
|
|
350 |
|
|
string256='depth lat lon' |
351 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,MASK_ID,'associate', |
352 |
|
|
& LEN_TRIM(string256),string256) |
353 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
354 |
|
|
|
355 |
|
|
!--------------------------------------------------------- |
356 |
|
|
string256='Surface Area of cells' |
357 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,AREA_ID,'long_name', |
358 |
|
|
& LEN_TRIM(string256),string256) |
359 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
360 |
|
|
|
361 |
|
|
string256='m^2' |
362 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,AREA_ID,'units', |
363 |
|
|
& LEN_TRIM(string256),string256) |
364 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
365 |
|
|
|
366 |
|
|
string256='lat lon' |
367 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,AREA_ID,'associate', |
368 |
|
|
& LEN_TRIM(string256),string256) |
369 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
370 |
|
|
|
371 |
|
|
!--------------------------------------------------------- |
372 |
|
|
string256='Bathymetry' |
373 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,BATHY_ID,'long_name', |
374 |
|
|
& LEN_TRIM(string256),string256) |
375 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
376 |
|
|
|
377 |
|
|
string256='m' |
378 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,BATHY_ID,'units', |
379 |
|
|
& LEN_TRIM(string256),string256) |
380 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
381 |
|
|
|
382 |
|
|
STATUS=NF_PUT_ATT_REAL(NC_ID,BATHY_ID,'missing_value', |
383 |
|
|
& NF_FLOAT,1,missing_value) |
384 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
385 |
|
|
|
386 |
|
|
string256='lat lon' |
387 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,BATHY_ID,'associate', |
388 |
|
|
& LEN_TRIM(string256),string256) |
389 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
390 |
|
|
|
391 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
392 |
|
|
string256='Region Mask' |
393 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_MASK_ID,'long_name', |
394 |
|
|
& LEN_TRIM(string256),string256) |
395 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
396 |
|
|
|
397 |
|
|
string256='dimensionless' |
398 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_MASK_ID,'units', |
399 |
|
|
& LEN_TRIM(string256),string256) |
400 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
401 |
|
|
|
402 |
|
|
STATUS=NF_PUT_ATT_REAL(NC_ID,REG_MASK_ID,'missing_value', |
403 |
|
|
& NF_FLOAT,1,missing_value) |
404 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
405 |
|
|
|
406 |
|
|
string256='lat lon dye' |
407 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_MASK_ID,'associate', |
408 |
|
|
& LEN_TRIM(string256),string256) |
409 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
410 |
|
|
|
411 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
412 |
|
|
|
413 |
|
|
string256='Region Area' |
414 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_AREA_ID,'long_name', |
415 |
|
|
& LEN_TRIM(string256),string256) |
416 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
417 |
|
|
|
418 |
|
|
string256='m^2' |
419 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_AREA_ID,'units', |
420 |
|
|
& LEN_TRIM(string256),string256) |
421 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
422 |
|
|
|
423 |
|
|
STATUS=NF_PUT_ATT_REAL(NC_ID,REG_AREA_ID,'missing_value', |
424 |
|
|
& NF_FLOAT,1,missing_value) |
425 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
426 |
|
|
|
427 |
|
|
string256='dye' |
428 |
|
|
STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_AREA_ID,'associate', |
429 |
|
|
& LEN_TRIM(string256),string256) |
430 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
431 |
|
|
|
432 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
433 |
|
|
|
434 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
435 |
|
|
! End of define mode |
436 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
437 |
|
|
STATUS=NF_ENDDEF(NC_ID) |
438 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
439 |
|
|
|
440 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
441 |
|
|
! Write data to file |
442 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
443 |
|
|
STATUS=NF_PUT_VAR_REAL(NC_ID,LON_ID,lon) |
444 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
445 |
|
|
|
446 |
|
|
STATUS=NF_PUT_VAR_REAL(NC_ID,BOUNDS_LON_ID,bounds_lon) |
447 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
448 |
|
|
|
449 |
|
|
STATUS=NF_PUT_VAR_REAL(NC_ID,LAT_ID,lat) |
450 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
451 |
|
|
|
452 |
|
|
STATUS=NF_PUT_VAR_REAL(NC_ID,BOUNDS_LAT_ID,bounds_lat) |
453 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
454 |
|
|
|
455 |
|
|
STATUS=NF_PUT_VAR_REAL(NC_ID,DEPTH_ID,depth) |
456 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
457 |
|
|
|
458 |
|
|
STATUS=NF_PUT_VAR_REAL(NC_ID,BOUNDS_DEPTH_ID,bounds_depth) |
459 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
460 |
|
|
|
461 |
|
|
STATUS=NF_PUT_VAR_REAL(NC_ID,MASK_ID,MASK) |
462 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
463 |
|
|
|
464 |
|
|
STATUS=NF_PUT_VAR_REAL(NC_ID,AREA_ID,AREA) |
465 |
|
|
|
466 |
|
|
STATUS=NF_PUT_VAR_REAL(NC_ID,BATHY_ID,BATHY) |
467 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
468 |
|
|
|
469 |
|
|
STATUS=NF_PUT_VAR_REAL(NC_ID,REG_MASK_ID,REGION_MASK) |
470 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
471 |
|
|
|
472 |
|
|
STATUS=NF_PUT_VAR_REAL(NC_ID,REG_AREA_ID,REGION_AREA) |
473 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
474 |
|
|
|
475 |
|
|
|
476 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
477 |
|
|
! Close the NetCDF file |
478 |
|
|
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
479 |
|
|
STATUS=NF_CLOSE(NC_ID) |
480 |
|
|
IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS) |
481 |
|
|
|
482 |
|
|
END |