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 |