Line data Source code
1 : !------------------------------------------------------------------------------
2 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
3 : ! and NASA/GSFC, SIVO, Code 610.3 !
4 : !------------------------------------------------------------------------------
5 : !BOP
6 : !
7 : ! !MODULE: HCO_m_netcdf_io_define.F90
8 : !
9 : ! !INTERFACE:
10 : !
11 : MODULE HCO_m_netcdf_io_define
12 : !
13 : ! !USES:
14 : !
15 : IMPLICIT NONE
16 : !
17 : ! !PUBLIC MEMBER FUNCTIONS:
18 : !
19 : PUBLIC :: NcDef_Dimension
20 : PUBLIC :: NcDef_Variable
21 : PUBLIC :: NcSetFill
22 : PUBLIC :: NcEnd_Def
23 : PUBLIC :: NcBegin_Def
24 :
25 : PUBLIC :: NcDef_glob_attributes
26 : INTERFACE NcDef_glob_attributes
27 : MODULE PROCEDURE NcDef_glob_attributes_c
28 : MODULE PROCEDURE NcDef_glob_attributes_i
29 : MODULE PROCEDURE NcDef_glob_attributes_r4
30 : MODULE PROCEDURE NcDef_glob_attributes_r8
31 : MODULE PROCEDURE NcDef_glob_attributes_i_arr
32 : MODULE PROCEDURE NcDef_glob_attributes_r4_arr
33 : MODULE PROCEDURE NcDef_glob_attributes_r8_arr
34 : END INTERFACE NcDef_glob_attributes
35 :
36 : PUBLIC :: NcDef_var_attributes
37 : INTERFACE NcDef_var_attributes
38 : MODULE PROCEDURE NcDef_var_attributes_c
39 : MODULE PROCEDURE NcDef_var_attributes_i
40 : MODULE PROCEDURE NcDef_var_attributes_r4
41 : MODULE PROCEDURE NcDef_var_attributes_r8
42 : MODULE PROCEDURE NcDef_var_attributes_i_arr
43 : MODULE PROCEDURE NcDef_var_attributes_r4_arr
44 : MODULE PROCEDURE NcDef_var_attributes_r8_arr
45 : END INTERFACE NcDef_var_attributes
46 : !
47 : ! !PRIVATE MEMBER FUNCTIONS:
48 : !
49 : PRIVATE :: NcDef_glob_attributes_c
50 : PRIVATE :: NcDef_glob_attributes_i
51 : PRIVATE :: NcDef_glob_attributes_r4
52 : PRIVATE :: NcDef_glob_attributes_r8
53 : PRIVATE :: NcDef_glob_attributes_i_arr
54 : PRIVATE :: NcDef_glob_attributes_r4_arr
55 : PRIVATE :: NcDef_glob_attributes_r8_arr
56 : PRIVATE :: NcDef_var_attributes_c
57 : PRIVATE :: NcDef_var_attributes_i
58 : PRIVATE :: NcDef_var_attributes_r4
59 : PRIVATE :: NcDef_var_attributes_r8
60 : PRIVATE :: NcDef_var_attributes_i_arr
61 : PRIVATE :: NcDef_var_attributes_r4_arr
62 : PRIVATE :: NcDef_var_attributes_r8_arr
63 : !
64 : ! !DESCRIPTION: Provides netCDF utility routines to define dimensions,
65 : ! variables and attributes.
66 : !\\
67 : !\\
68 : ! !AUTHOR:
69 : ! Jules Kouatchou
70 : !
71 : ! !REVISION HISTORY:
72 : ! See https://github.com/geoschem/hemco for complete history
73 : !EOP
74 : !------------------------------------------------------------------------------
75 : !BOC
76 : CONTAINS
77 : !EOC
78 : !------------------------------------------------------------------------------
79 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
80 : ! and NASA/GSFC, SIVO, Code 610.3 !
81 : !------------------------------------------------------------------------------
82 : !BOP
83 : !
84 : ! !IROUTINE: NcDef_dimension
85 : !
86 : ! !INTERFACE:
87 : !
88 0 : SUBROUTINE NcDef_dimension(ncid,name,len,id,unlimited)
89 : !
90 : ! !USES:
91 : !
92 : USE netCDF
93 : USE m_do_err_out
94 : !
95 : ! !INPUT PARAMETERS:
96 : !! ncid : netCDF file id
97 : !! name : dimension name
98 : !! len : dimension number
99 : CHARACTER (LEN=*), INTENT(IN) :: name
100 : INTEGER, INTENT(IN) :: ncid, len
101 : LOGICAL, OPTIONAL, INTENT(IN) :: unlimited
102 : !
103 : ! !OUTPUT PARAMETERS:
104 : !! id : dimension id
105 : INTEGER, INTENT(OUT) :: id
106 :
107 : INTEGER :: len0
108 : !
109 : ! !DESCRIPTION: Defines dimension.
110 : !\\
111 : !\\
112 : ! !AUTHOR:
113 : ! Jules Kouatchou and Maharaj Bhat
114 : !
115 : ! !REVISION HISTORY:
116 : ! See https://github.com/geoschem/hemco for complete history
117 : !EOP
118 : !------------------------------------------------------------------------------
119 : !BOC
120 : !
121 : ! !LOCAL VARIABLES:
122 : CHARACTER (len=512) :: err_msg
123 : INTEGER :: ierr
124 :
125 : ! If unlimited variable is present and true,
126 : ! then make this dimension unlimited
127 0 : len0 = len
128 0 : if (present(unlimited)) then
129 0 : if (unlimited) then
130 0 : len0 = NF90_UNLIMITED
131 : endif
132 : endif
133 :
134 0 : ierr = NF90_Def_Dim(ncid, name, len0, id)
135 :
136 0 : IF (ierr.ne.NF90_NOERR) then
137 0 : err_msg = 'NF90_Def_Dim: can not define dimension : '// Trim (name)
138 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
139 : END IF
140 :
141 0 : END SUBROUTINE NcDef_dimension
142 : !EOC
143 : !------------------------------------------------------------------------------
144 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
145 : ! and NASA/GSFC, SIVO, Code 610.3 !
146 : !------------------------------------------------------------------------------
147 : !BOP
148 : !
149 : ! !IROUTINE: NcDef_variable
150 : !
151 : ! !INTERFACE:
152 : !
153 0 : SUBROUTINE NcDef_variable(ncid, name, xtype, ndims, dims, var_id, compress)
154 : !
155 : ! !USES:
156 : !
157 : USE netCDF
158 : USE m_do_err_out
159 : !
160 : ! !INPUT PARAMETERS:
161 : !
162 : !! ncid : netCDF file id
163 : !! name : name of the variable
164 : !! type : type of the variable
165 : !! (NF90_FLOAT, NF90_CHAR, NF90_INT,
166 : !! NF90_DOUBLE, NF90_BYTE, NF90_SHORT)
167 : !! ndims : number of dimensions of the variable
168 : !! dims : netCDF dimension id of the variable
169 : CHARACTER (LEN=*), INTENT(IN) :: name
170 : INTEGER, INTENT(IN) :: ncid, ndims
171 : INTEGER, INTENT(IN) :: dims(ndims)
172 : INTEGER, INTENT(IN) :: xtype
173 : LOGICAL, OPTIONAL, INTENT(IN) :: compress
174 : !
175 : ! !OUTPUT PARAMETERS:
176 : !
177 : !! varid : netCDF variable id returned by NF90_DEF_VAR
178 : INTEGER, INTENT(OUT) :: var_id
179 : !
180 : ! !DESCRIPTION: Defines a netCDF variable.
181 : !\\
182 : !\\
183 : ! !AUTHOR:
184 : ! Jules Kouatchou and Maharaj Bhat
185 : !
186 : ! !REVISION HISTORY:
187 : ! See https://github.com/geoschem/hemco for complete history
188 : !EOP
189 : !------------------------------------------------------------------------------
190 : !BOC
191 : !
192 : ! !LOCAL VARIABLES:
193 : character(len=512) :: err_msg
194 : integer :: ierr
195 : logical :: doStop
196 :
197 : #ifdef NC_HAS_COMPRESSION
198 : !=====================================================================
199 : ! Create a compressed (deflated) netCDF variable
200 : !
201 : ! NOTE: We need to block this out with an #ifdef because some
202 : ! netCDF installations might lack the deflation capability,
203 : ! which would cause a compile-time error. (bmy, 3/1/17)
204 : !========================================================================
205 : IF ( PRESENT( Compress ) ) then
206 :
207 : !------------------------------------------------------------------
208 : ! If COMPRESS is passed as an optional argument, and is TRUE,
209 : ! then define the variable with deflate_level=1. Higher values
210 : ! of deflate_level yield minimal additiional benefit.
211 : !
212 : ! ALSO NOTE: Newer versions of netCDF balk when you try to compress
213 : ! a scalar variable. This generates an annoying warning message.
214 : ! To avoid this, only compress array variables. (bmy, 11/30/20)
215 : !-------------------------------------------------------------------
216 : IF ( Compress .and. ndims > 0 ) THEN
217 :
218 : ! Create deflated variable
219 : ierr = NF90_Def_Var( ncid, name, xtype, dims, var_id, &
220 : shuffle=.TRUE., deflate_level=1 )
221 :
222 : ! Check for errors.
223 : ! No message will be generated if the error is simply that the
224 : ! file is not netCDF-4 (as netCDF-3 doesn't support compression)
225 : IF ( (ierr.ne.NF90_NOERR) .and. (ierr.ne.NF90_ENOTNC4)) THEN
226 :
227 : ! Errors enabling compression will not halt the program
228 : doStop = .False.
229 :
230 : ! Print error
231 : err_msg = 'NF90_Def_Var: can not create compressed variable : '//&
232 : Trim(name)
233 : CALL Do_Err_Out (err_msg, doStop, 0, 0, 0, 0, 0.0d0, 0.0d0)
234 : END IF
235 :
236 : ! Return successfully
237 : RETURN
238 : ENDIF
239 : ENDIF
240 : #endif
241 :
242 : !========================================================================
243 : ! Create an uncompressed netCDF variable if:
244 : ! (1) COMPRESS is not passed as an optional argument
245 : ! (2) COMPRESS is passed as an optional argument but is FALSE
246 : ! (3) The variable is a scalar (ndims == 0)
247 : !========================================================================
248 0 : ierr = NF90_Def_Var( ncid, name, xtype, dims, var_id )
249 0 : IF ( ierr /= NF90_NOERR ) THEN
250 : err_msg = 'NF90_Def_Var_Deflate: can not create variable : '// &
251 0 : Trim (name)
252 0 : CALL Do_Err_Out (err_msg, doStop, 0, 0, 0, 0, 0.0d0, 0.0d0)
253 : ENDIF
254 :
255 0 : END SUBROUTINE NcDef_variable
256 : !EOC
257 : !------------------------------------------------------------------------------
258 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
259 : ! and NASA/GSFC, SIVO, Code 610.3 !
260 : !------------------------------------------------------------------------------
261 : !BOP
262 : !
263 : ! !IROUTINE: NcDef_var_attributes
264 : !
265 : ! !INTERFACE:
266 : !
267 0 : SUBROUTINE NcDef_var_attributes_c(ncid, var_id, att_name, att_val)
268 : !
269 : ! !USES:
270 : !
271 : USE netCDF
272 : USE m_do_err_out
273 : !
274 : ! !INPUT PARAMETERS:
275 : !! ncid : netCDF file id
276 : !! var_id : netCDF variable id
277 : !! att_name: attribute name
278 : !! att_val : attribute value
279 : CHARACTER (LEN=*), INTENT(IN) :: att_name, att_val
280 : INTEGER, INTENT(IN) :: ncid, var_id
281 : !
282 : ! !DESCRIPTION: Defines a netCDF variable attribute of type: CHARACTER.
283 : !\\
284 : !\\
285 : ! !AUTHOR:
286 : ! Bob Yantosca (based on code by Jules Kouatchou and Maharaj Bhat)
287 : !
288 : ! !REVISION HISTORY:
289 : ! See https://github.com/geoschem/hemco for complete history
290 : !EOP
291 : !------------------------------------------------------------------------------
292 : !BOC
293 : !
294 : ! !LOCAL VARIABLES:
295 : CHARACTER (LEN=512) :: err_msg
296 : INTEGER :: ierr
297 : !
298 0 : ierr = NF90_Put_Att(ncid, var_id, att_name, att_val)
299 :
300 0 : IF (ierr /= NF90_NOERR) THEN
301 : err_msg = 'NcDef_var_attributes_c: can not define attribute : ' // &
302 0 : TRIM (att_name)
303 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
304 : END IF
305 :
306 0 : END SUBROUTINE NcDef_var_attributes_c
307 : !EOC
308 : !------------------------------------------------------------------------------
309 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
310 : ! and NASA/GSFC, SIVO, Code 610.3 !
311 : !------------------------------------------------------------------------------
312 : !BOP
313 : !
314 : ! !IROUTINE: NcDef_var_attributes_i
315 : !
316 : ! !INTERFACE:
317 : !
318 0 : SUBROUTINE NcDef_var_attributes_i(ncid, var_id, att_name, att_val)
319 : !
320 : ! !USES:
321 : !
322 : USE netCDF
323 : USE m_do_err_out
324 : !
325 : IMPLICIT NONE
326 : INCLUDE 'netcdf.inc'
327 : !
328 : ! !INPUT PARAMETERS:
329 : !! ncid : netCDF file id
330 : !! var_id : netCDF variable id
331 : !! att_name: attribute name
332 : !! att_val : attribute value
333 : INTEGER, INTENT(IN) :: att_val
334 : CHARACTER (LEN=*), INTENT(IN) :: att_name
335 : INTEGER, INTENT(IN) :: ncid, var_id
336 : !
337 : ! !DESCRIPTION: Defines a netCDF variable attribute of type: INTEGER.
338 : !\\
339 : !\\
340 : ! !AUTHOR:
341 : ! Bob Yantosca (based on code by Jules Kouatchou and Maharaj Bhat)
342 : !
343 : ! !REVISION HISTORY:
344 : ! 26 Sep 2013 - R. Yantosca - Initial version
345 : ! See https://github.com/geoschem/hemco for complete history
346 : !EOP
347 : !------------------------------------------------------------------------------
348 : !BOC
349 : !
350 : ! !LOCAL VARIABLES:
351 : character (len=512) :: err_msg
352 : integer :: mylen, ierr
353 : !
354 0 : ierr = NF90_Put_Att( ncid, var_id, att_name, att_val )
355 :
356 0 : IF (ierr.ne.NF90_NOERR) THEN
357 : err_msg = 'NcDef_var_attributes_i: can not define attribute : ' // &
358 0 : TRIM (att_name)
359 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
360 : END IF
361 :
362 0 : END SUBROUTINE NcDef_var_attributes_i
363 : !EOC
364 : !------------------------------------------------------------------------------
365 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
366 : ! and NASA/GSFC, SIVO, Code 610.3 !
367 : !------------------------------------------------------------------------------
368 : !BOP
369 : !
370 : ! !IROUTINE: NcDef_var_attributes_r4
371 : !
372 : ! !INTERFACE:
373 : !
374 0 : SUBROUTINE NcDef_var_attributes_r4(ncid, var_id, att_name, att_val)
375 : !
376 : ! !USES:
377 : !
378 : USE netCDF
379 : USE m_do_err_out
380 : !
381 : ! !INPUT PARAMETERS:
382 : !! ncid : netCDF file id
383 : !! var_id : netCDF variable id
384 : !! att_name: attribute name
385 : !! att_val : attribute value
386 : REAL*4, INTENT(IN) :: att_val
387 : CHARACTER (LEN=*), INTENT(IN) :: att_name
388 : INTEGER, INTENT(IN) :: ncid, var_id
389 : !
390 : ! !DESCRIPTION: Defines a netCDF variable attribute of type: REAL*4.
391 : !\\
392 : !\\
393 : ! !AUTHOR:
394 : ! Bob Yantosca (based on code by Jules Kouatchou and Maharaj Bhat)
395 : !
396 : ! !REVISION HISTORY:
397 : ! 26 Sep 2013 - R. Yantosca - Initial version
398 : ! See https://github.com/geoschem/hemco for complete history
399 : !EOP
400 : !------------------------------------------------------------------------------
401 : !BOC
402 : !
403 : ! !LOCAL VARIABLES:
404 : CHARACTER (LEN=512) :: err_msg
405 : INTEGER :: ierr
406 : !
407 0 : ierr = NF90_Put_Att( ncid, var_id, att_name, att_val )
408 :
409 0 : IF (ierr.ne.NF90_NOERR) THEN
410 : err_msg = 'NcDef_var_attributes_r4: can not define attribute : ' // &
411 0 : TRIM (att_name)
412 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
413 : END IF
414 :
415 0 : END SUBROUTINE NcDef_var_attributes_r4
416 : !EOC
417 : !------------------------------------------------------------------------------
418 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
419 : ! and NASA/GSFC, SIVO, Code 610.3 !
420 : !------------------------------------------------------------------------------
421 : !BOP
422 : !
423 : ! !IROUTINE: NcDef_var_attributes_r8
424 : !
425 : ! !INTERFACE:
426 : !
427 0 : SUBROUTINE NcDef_var_attributes_r8(ncid, var_id, att_name, att_val)
428 : !
429 : ! !USES:
430 : !
431 : USE netCDF
432 : USE m_do_err_out
433 : !
434 : ! !INPUT PARAMETERS:
435 : !! ncid : netCDF file id
436 : !! var_id : netCDF variable id
437 : !! att_name: attribute name
438 : !! att_val : attribute value
439 : REAL*8, INTENT(IN) :: att_val
440 : CHARACTER (LEN=*), INTENT(IN) :: att_name
441 : INTEGER, INTENT(IN) :: ncid, var_id
442 : !
443 : ! !DESCRIPTION: Defines a netCDF variable attribute of type: REAL*4.
444 : !\\
445 : !\\
446 : ! !AUTHOR:
447 : ! Bob Yantosca (based on code by Jules Kouatchou and Maharaj Bhat)
448 : !
449 : ! !REVISION HISTORY:
450 : ! 20 Sep 2013 - R. Yantosca - Initial version
451 : ! See https://github.com/geoschem/hemco for complete history
452 : !EOP
453 : !------------------------------------------------------------------------------
454 : !BOC
455 : !
456 : ! !LOCAL VARIABLES:
457 : CHARACTER (LEN=512) :: err_msg
458 : INTEGER :: ierr
459 : !
460 0 : ierr = NF90_Put_Att( ncid, var_id, att_name, att_val )
461 :
462 0 : IF (ierr.ne.NF90_NOERR) THEN
463 : err_msg = 'NcDef_var_attributes_r8: can not define attribute : ' // &
464 0 : TRIM (att_name)
465 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
466 : END IF
467 :
468 0 : END SUBROUTINE NcDef_var_attributes_r8
469 : !EOC
470 : !------------------------------------------------------------------------------
471 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
472 : ! and NASA/GSFC, SIVO, Code 610.3 !
473 : !------------------------------------------------------------------------------
474 : !BOP
475 : !
476 : ! !IROUTINE: NcDef_var_attributes_i_arr
477 : !
478 : ! !INTERFACE:
479 : !
480 0 : SUBROUTINE NcDef_var_attributes_i_arr(ncid, var_id, att_name, att_val)
481 : !
482 : ! !USES:
483 : !
484 : USE netCDF
485 : USE m_do_err_out
486 : !
487 : ! !INPUT PARAMETERS:
488 : !! ncid : netCDF file id
489 : !! var_id : netCDF variable id
490 : !! att_name: attribute name
491 : !! att_val : attribute value
492 : INTEGER, INTENT(IN) :: att_val(:)
493 : CHARACTER (LEN=*), INTENT(IN) :: att_name
494 : INTEGER, INTENT(IN) :: ncid, var_id
495 : !
496 : ! !DESCRIPTION: Defines a netCDF variable attribute of type: INTEGER vector.
497 : !\\
498 : !\\
499 : ! !AUTHOR:
500 : ! Bob Yantosca (based on code by Jules Kouatchou and Maharaj Bhat)
501 : !
502 : ! !REVISION HISTORY:
503 : ! 26 Sep 2013 - R. Yantosca - Initial version
504 : ! See https://github.com/geoschem/hemco for complete history
505 : !EOP
506 : !------------------------------------------------------------------------------
507 : !BOC
508 : !
509 : ! !LOCAL VARIABLES:
510 : CHARACTER (LEN=512) :: err_msg
511 : INTEGER :: ierr
512 : !
513 0 : ierr = NF90_Put_Att( ncid, var_id, att_name, att_val )
514 :
515 0 : iF (ierr.ne.NF90_NOERR) THEN
516 : err_msg = 'NcDef_var_attributes_i_arr: can not define attribute : ' &
517 0 : // TRIM (att_name)
518 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
519 : END IF
520 :
521 0 : END SUBROUTINE NcDef_var_attributes_i_arr
522 : !EOC
523 : !------------------------------------------------------------------------------
524 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
525 : ! and NASA/GSFC, SIVO, Code 610.3 !
526 : !------------------------------------------------------------------------------
527 : !BOP
528 : !
529 : ! !IROUTINE: NcDef_var_attributes_r4_arr
530 : !
531 : ! !INTERFACE:
532 : !
533 0 : SUBROUTINE NcDef_var_attributes_r4_arr(ncid, var_id, att_name, att_val)
534 : !
535 : ! !USES:
536 : !
537 : USE netCDF
538 : USE m_do_err_out
539 : !
540 : ! !INPUT PARAMETERS:
541 : !! ncid : netCDF file id
542 : !! var_id : netCDF variable id
543 : !! att_name: attribute name
544 : !! att_val : attribute value
545 : REAL*4, INTENT(IN) :: att_val(:)
546 : CHARACTER (LEN=*), INTENT(IN) :: att_name
547 : INTEGER, INTENT(IN) :: ncid, var_id
548 : !
549 : ! !DESCRIPTION: Defines a netCDF variable attribute of type: REAL*4 vector
550 : !\\
551 : !\\
552 : ! !AUTHOR:
553 : ! Bob Yantosca (based on code by Jules Kouatchou and Maharaj Bhat)
554 : !
555 : ! !REVISION HISTORY:
556 : ! 26 Sep 2013 - R. Yantosca - Initial version
557 : ! See https://github.com/geoschem/hemco for complete history
558 : !EOP
559 : !------------------------------------------------------------------------------
560 : !BOC
561 : !
562 : ! !LOCAL VARIABLES:
563 : CHARACTER (LEN=512) :: err_msg
564 : INTEGER :: ierr
565 : !
566 0 : ierr = NF90_Put_Att( ncid, var_id, att_name, att_val )
567 :
568 0 : IF (ierr.ne.NF90_NOERR) THEN
569 : err_msg = 'NcDef_var_attributes_r4_arr: can not define attribute : ' &
570 0 : // TRIM (att_name)
571 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
572 : END IF
573 :
574 0 : END SUBROUTINE NcDef_var_attributes_r4_arr
575 : !EOC
576 : !------------------------------------------------------------------------------
577 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
578 : ! and NASA/GSFC, SIVO, Code 610.3 !
579 : !------------------------------------------------------------------------------
580 : !BOP
581 : !
582 : ! !IROUTINE: NcDef_var_attributes_r8_arr
583 : !
584 : ! !INTERFACE:
585 : !
586 0 : SUBROUTINE NcDef_var_attributes_r8_arr(ncid, var_id, att_name, att_val)
587 : !
588 : ! !USES:
589 : !
590 : USE netCDF
591 : USE m_do_err_out
592 : !
593 : ! !INPUT PARAMETERS:
594 : !! ncid : netCDF file id
595 : !! var_id : netCDF variable id
596 : !! att_name: attribute name
597 : !! att_val : attribute value
598 : REAL*8, INTENT(IN) :: att_val(:)
599 : CHARACTER (LEN=*), INTENT(IN) :: att_name
600 : INTEGER, INTENT(IN) :: ncid, var_id
601 : !
602 : ! !DESCRIPTION: Defines a netCDF variable attribute of type: REAL*8 vector
603 : !\\
604 : !\\
605 : ! !AUTHOR:
606 : ! Jules Kouatchou and Maharaj Bhat
607 : !
608 : ! !REVISION HISTORY:
609 : ! 20 Sep 2013 - R. Yantosca - Initial version
610 : ! See https://github.com/geoschem/hemco for complete history
611 : !EOP
612 : !------------------------------------------------------------------------------
613 : !BOC
614 : !
615 : ! !LOCAL VARIABLES:
616 : character (len=512) :: err_msg
617 : integer :: ierr
618 : !
619 0 : ierr = NF90_Put_Att( ncid, var_id, att_name, att_val )
620 :
621 0 : IF (ierr.ne.NF90_NOERR) THEN
622 : err_msg = 'NcDef_var_attributes_r4_arr: can not define attribute : '&
623 0 : // Trim (att_name)
624 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
625 : END IF
626 :
627 0 : END SUBROUTINE NcDef_var_attributes_r8_arr
628 : !EOC
629 : !------------------------------------------------------------------------------
630 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
631 : ! and NASA/GSFC, SIVO, Code 610.3 !
632 : !------------------------------------------------------------------------------
633 : !BOP
634 : !
635 : ! !IROUTINE: NcDef_glob_attributes_c
636 : !
637 : ! !INTERFACE:
638 : !
639 0 : SUBROUTINE NcDef_glob_attributes_c(ncid, att_name, att_val)
640 : !
641 : ! !USES:
642 : !
643 : USE netCDF
644 : USE m_do_err_out
645 : !
646 : ! !INPUT PARAMETERS:
647 : !! ncid : netCDF file id
648 : !! att_name: attribute name
649 : !! att_val : attribute value
650 : !
651 : CHARACTER (LEN=*), INTENT(IN) :: att_val
652 : CHARACTER (LEN=*), INTENT(IN) :: att_name
653 : INTEGER, INTENT(IN) :: ncid
654 : !
655 : ! !DESCRIPTION: Defines global attributes of type: CHARACTER
656 : !\\
657 : !\\
658 : ! !AUTHOR:
659 : ! Bob Yantosca( based on code by Jules Kouatchou)
660 : !
661 : ! !REVISION HISTORY:
662 : ! 26 Sep 2013 - R. Yantosca - Initial version
663 : ! See https://github.com/geoschem/hemco for complete history
664 : !EOP
665 : !-------------------------------------------------------------------------
666 : !BOC
667 : !
668 : ! !LOCAL VARIABLES:
669 : CHARACTER (LEN=512) :: err_msg
670 : INTEGER :: ierr
671 : !
672 0 : ierr = NF90_Put_Att(ncid, NF90_GLOBAL, att_name, att_val)
673 :
674 0 : IF (ierr.ne.NF90_NOERR) THEN
675 : err_msg = 'NcDef_glob_attributes_c: can not define attribute : ' // &
676 0 : TRIM (att_name)
677 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
678 : END IF
679 :
680 0 : END SUBROUTINE NcDef_glob_attributes_c
681 : !EOC
682 : !------------------------------------------------------------------------------
683 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
684 : ! and NASA/GSFC, SIVO, Code 610.3 !
685 : !------------------------------------------------------------------------------
686 : !BOP
687 : !
688 : ! !IROUTINE: NcDef_glob_attributes_i
689 : !
690 : ! !INTERFACE:
691 : !
692 0 : SUBROUTINE NcDef_glob_attributes_i(ncid, att_name, att_val)
693 : !
694 : ! !USES:
695 : !
696 : USE netCDF
697 : USE m_do_err_out
698 : !
699 : ! !INPUT PARAMETERS:
700 : !! ncid : netCDF file id
701 : !! att_name: attribute name
702 : !! att_val : attribute value
703 : !
704 : INTEGER, INTENT(IN) :: att_val
705 : CHARACTER (LEN=*), INTENT(IN) :: att_name
706 : INTEGER, INTENT(IN) :: NCID
707 : !
708 : ! !DESCRIPTION: Defines global attributes of type: INTEGER
709 : !\\
710 : !\\
711 : ! !AUTHOR:
712 : ! Bob Yantosca( based on code by Jules Kouatchou)
713 : !
714 : ! !REVISION HISTORY:
715 : ! 26 Sep 2013 - R. Yantosca - Initial version
716 : ! See https://github.com/geoschem/hemco for complete history
717 : !EOP
718 : !-------------------------------------------------------------------------
719 : !BOC
720 : !
721 : ! !LOCAL VARIABLES:
722 : CHARACTER (LEN=512) :: err_msg
723 : INTEGER :: ierr
724 : !
725 0 : ierr = NF90_Put_Att( ncid, NF90_GLOBAL, att_name, att_val )
726 :
727 0 : IF (ierr.ne.NF90_NOERR) THEN
728 : err_msg = 'NcDef_glob_attributes_i: can not define attribute : ' // &
729 0 : TRIM (att_name)
730 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
731 : END IF
732 :
733 0 : END SUBROUTINE NcDef_glob_attributes_i
734 : !EOC
735 : !------------------------------------------------------------------------------
736 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
737 : ! and NASA/GSFC, SIVO, Code 610.3 !
738 : !------------------------------------------------------------------------------
739 : !BOP
740 : !
741 : ! !IROUTINE: NcDef_glob_attributes_r4
742 : !
743 : ! !INTERFACE:
744 : !
745 0 : SUBROUTINE NcDef_glob_attributes_r4(ncid, att_name, att_val)
746 : !
747 : ! !USES:
748 : !
749 : USE netCDF
750 : USE m_do_err_out
751 : !
752 : ! !INPUT PARAMETERS:
753 : !! ncid : netCDF file id
754 : !! att_name: attribute name
755 : !! att_val : attribute value
756 : !
757 : REAL*4, INTENT(IN) :: att_val
758 : CHARACTER (LEN=*), INTENT(IN) :: att_name
759 : INTEGER, INTENT(IN) :: ncid
760 : !
761 : ! !DESCRIPTION: Defines global attributes of type: REAL*4
762 : !\\
763 : !\\
764 : ! !AUTHOR:
765 : ! Bob Yantosca( based on code by Jules Kouatchou)
766 : !
767 : ! !REVISION HISTORY:
768 : ! 26 Sep 2013 - R. Yantosca - Initial version
769 : ! See https://github.com/geoschem/hemco for complete history
770 : !EOP
771 : !-------------------------------------------------------------------------
772 : !BOC
773 : !
774 : ! !LOCAL VARIABLES:
775 : character (len=512) :: err_msg
776 : integer :: ierr
777 : !
778 0 : ierr = NF90_Put_Att( ncid, NF90_GLOBAL, att_name, att_val )
779 :
780 0 : IF (ierr.ne.NF90_NOERR) THEN
781 : err_msg = 'NcDef_glob_attributes_r4: can not define attribute : ' // &
782 0 : TRIM (att_name)
783 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
784 : END IF
785 :
786 0 : END SUBROUTINE NcDef_glob_attributes_r4
787 : !EOC
788 : !------------------------------------------------------------------------------
789 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
790 : ! and NASA/GSFC, SIVO, Code 610.3 !
791 : !------------------------------------------------------------------------------
792 : !BOP
793 : !
794 : ! !IROUTINE: NcDef_glob_attributes_r8
795 : !
796 : ! !INTERFACE:
797 : !
798 0 : SUBROUTINE NcDef_glob_attributes_r8(ncid, att_name, att_val)
799 : !
800 : ! !USES:
801 : !
802 : USE netCDF
803 : USE m_do_err_out
804 : !
805 : ! !INPUT PARAMETERS:
806 : !! ncid : netCDF file id
807 : !! att_name: attribute name
808 : !! att_val : attribute value
809 : !
810 : REAL*8, INTENT(IN) :: att_val
811 : CHARACTER (LEN=*), INTENT(IN) :: att_name
812 : INTEGER, INTENT(IN) :: ncid
813 : !
814 : ! !DESCRIPTION: Defines global attributes of type: REAL*4
815 : !\\
816 : !\\
817 : ! !AUTHOR:
818 : ! Bob Yantosca( based on code by Jules Kouatchou)
819 : !
820 : ! !REVISION HISTORY:
821 : ! 26 Sep 2013 - R. Yantosca - Initial version
822 : ! See https://github.com/geoschem/hemco for complete history
823 : !EOP
824 : !-------------------------------------------------------------------------
825 : !BOC
826 : !
827 : ! !LOCAL VARIABLES:
828 : character (len=512) :: err_msg
829 : integer :: ierr
830 : !
831 0 : ierr = NF90_Put_Att( ncid, NF90_GLOBAL, att_name, att_val )
832 :
833 0 : IF (ierr.ne.NF90_NOERR) THEN
834 : err_msg = 'NcDef_glob_attributes_r8: can not define attribute : ' // &
835 0 : TRIM (att_name)
836 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
837 : END IF
838 :
839 0 : END SUBROUTINE NcDef_glob_attributes_r8
840 : !EOC
841 : !------------------------------------------------------------------------------
842 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
843 : ! and NASA/GSFC, SIVO, Code 610.3 !
844 : !------------------------------------------------------------------------------
845 : !BOP
846 : !
847 : ! !IROUTINE: NcDef_glob_attributes_i_arr
848 : !
849 : ! !INTERFACE:
850 : !
851 0 : SUBROUTINE NcDef_glob_attributes_i_arr(ncid, att_name, att_val)
852 : !
853 : ! !USES:
854 : !
855 : USE netCDF
856 : USE m_do_err_out
857 : !
858 : ! !INPUT PARAMETERS:
859 : !! ncid : netCDF file id
860 : !! att_name: attribute name
861 : !! att_val : attribute value
862 : !
863 : INTEGER, INTENT(IN) :: att_val(:)
864 : CHARACTER (LEN=*), INTENT(IN) :: att_name
865 : INTEGER, INTENT(IN) :: ncid
866 : !
867 : ! !DESCRIPTION: Defines global attributes of type: INTEGER vector
868 : !\\
869 : !\\
870 : ! !AUTHOR:
871 : ! Bob Yantosca( based on code by Jules Kouatchou)
872 : !
873 : ! !REVISION HISTORY:
874 : ! 26 Sep 2013 - R. Yantosca - Initial version
875 : ! See https://github.com/geoschem/hemco for complete history
876 : !EOP
877 : !-------------------------------------------------------------------------
878 : !BOC
879 : !
880 : ! !LOCAL VARIABLES:
881 : CHARACTER (LEN=512) :: err_msg
882 : INTEGER :: ierr
883 : !
884 0 : ierr = NF90_Put_Att( ncid, NF90_GLOBAL, att_name, att_val )
885 :
886 0 : IF (ierr.ne.NF90_NOERR) THEN
887 : err_msg = 'NcDef_glob_attributes_i_arr: can not define attribute : ' &
888 0 : // Trim (att_name)
889 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
890 : END IF
891 :
892 0 : END SUBROUTINE NcDef_glob_attributes_i_arr
893 : !EOC
894 : !------------------------------------------------------------------------------
895 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
896 : ! and NASA/GSFC, SIVO, Code 610.3 !
897 : !------------------------------------------------------------------------------
898 : !BOP
899 : !
900 : ! !IROUTINE: NcDef_glob_attributes_r4_arr
901 : !
902 : ! !INTERFACE:
903 : !
904 0 : SUBROUTINE NcDef_glob_attributes_r4_arr(ncid,att_name,att_val)
905 : !
906 : ! !USES:
907 : !
908 : USE netCDF
909 : USE m_do_err_out
910 : !
911 : ! !INPUT PARAMETERS:
912 : !! ncid : netCDF file id
913 : !! att_name: attribute name
914 : !! att_val : attribute value
915 : !
916 : REAL*4, INTENT(IN) :: att_val(:)
917 : CHARACTER (LEN=*), INTENT(IN) :: att_name
918 : INTEGER, INTENT(IN) :: ncid
919 : !
920 : ! !DESCRIPTION: Defines global attributes of type: REAL*4 vector
921 : !\\
922 : !\\
923 : ! !AUTHOR:
924 : ! Bob Yantosca( based on code by Jules Kouatchou)
925 : !
926 : ! !REVISION HISTORY:
927 : ! 26 Sep 2013 - R. Yantosca - Initial version
928 : ! See https://github.com/geoschem/hemco for complete history
929 : !EOP
930 : !-------------------------------------------------------------------------
931 : !BOC
932 : !
933 : ! !LOCAL VARIABLES:
934 : character (len=512) :: err_msg
935 : integer :: ierr
936 : !
937 0 : ierr = NF90_Put_Att( ncid, NF90_GLOBAL, att_name, att_val )
938 :
939 0 : IF (ierr.ne.NF90_NOERR) THEN
940 : err_msg = 'NcDef_glob_attributes_r4_arr: can not define attribute : ' &
941 0 : // TRIM (att_name)
942 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
943 : END IF
944 :
945 0 : END SUBROUTINE NcDef_glob_attributes_r4_arr
946 : !EOC
947 : !------------------------------------------------------------------------------
948 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
949 : ! and NASA/GSFC, SIVO, Code 610.3 !
950 : !------------------------------------------------------------------------------
951 : !BOP
952 : !
953 : ! !IROUTINE: NcDef_glob_attributes_r8_arr
954 : !
955 : ! !INTERFACE:
956 : !
957 0 : SUBROUTINE NcDef_glob_attributes_r8_arr(ncid, att_name, att_val)
958 : !
959 : ! !USES:
960 : !
961 : USE netCDF
962 : USE m_do_err_out
963 : !
964 : ! !INPUT PARAMETERS:
965 : !! ncid : netCDF file id
966 : !! att_name: attribute name
967 : !! att_val : attribute value
968 : !
969 : REAL*8, intent(in) :: att_val(:)
970 : character (len=*), intent(in) :: att_name
971 : integer, intent(in) :: ncid
972 : !
973 : ! !DESCRIPTION: Defines global attributes of type: REAL*8 vector
974 : !\\
975 : !\\
976 : ! !AUTHOR:
977 : ! Bob Yantosca( based on code by Jules Kouatchou)
978 : !
979 : ! !REVISION HISTORY:
980 : ! 26 Sep 2013 - R. Yantosca - Initial version
981 : ! See https://github.com/geoschem/hemco for complete history
982 : !EOP
983 : !-------------------------------------------------------------------------
984 : !BOC
985 : !
986 : ! !LOCAL VARIABLES:
987 : character (len=512) :: err_msg
988 : integer :: ierr
989 : !
990 0 : ierr = NF90_Put_Att( ncid, NF90_GLOBAL, att_name, att_val )
991 :
992 0 : IF (ierr.ne.NF90_NOERR) THEN
993 : err_msg = 'NcDef_glob_attributes_r8_arr: can not define attribute : ' &
994 0 : // TRIM (att_name)
995 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
996 : END IF
997 :
998 0 : END SUBROUTINE NcDef_glob_attributes_r8_arr
999 : !EOC
1000 : !------------------------------------------------------------------------------
1001 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
1002 : ! and NASA/GSFC, SIVO, Code 610.3 !
1003 : !------------------------------------------------------------------------------
1004 : !BOP
1005 : !
1006 : ! !IROUTINE: NcSetFill
1007 : !
1008 : ! !INTERFACE:
1009 : !
1010 0 : SUBROUTINE NcSetFill(ncid, ifill, omode)
1011 : !
1012 : ! !USES:
1013 : !
1014 : USE netCDF
1015 : USE m_do_err_out
1016 : !
1017 : ! !INPUT PARAMETERS:
1018 : !
1019 : INTEGER, INTENT(IN ) :: ncid, ifill
1020 : INTEGER, INTENT(INOUT) :: omode
1021 : !
1022 : ! !DESCRIPTION: Sets fill method.
1023 : !\\
1024 : !\\
1025 : ! !AUTHOR:
1026 : ! Jules Kouatchou
1027 : !
1028 : ! !REVISION HISTORY:
1029 : ! See https://github.com/geoschem/hemco for complete history
1030 : !EOP
1031 : !-------------------------------------------------------------------------
1032 : !BOC
1033 : !
1034 : ! !LOCAL VARIABLES:
1035 : character (len=512) :: err_msg
1036 : integer :: mylen, ierr
1037 : !
1038 0 : ierr = NF90_Set_Fill(ncid, NF90_NOFILL, omode)
1039 :
1040 0 : IF (ierr.ne.NF90_NOERR) THEN
1041 0 : err_msg = 'NF90_Set_FIll: Error in omode '
1042 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
1043 : END IF
1044 :
1045 0 : END SUBROUTINE NcSetFill
1046 : !EOC
1047 : !------------------------------------------------------------------------------
1048 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
1049 : ! and NASA/GSFC, SIVO, Code 610.3 !
1050 : !------------------------------------------------------------------------------
1051 : !BOP
1052 : !
1053 : ! !IROUTINE: NcEnd_Def
1054 : !
1055 : ! !INTERFACE:
1056 : !
1057 0 : SUBROUTINE NcEnd_Def(ncid)
1058 : !
1059 : ! !USES:
1060 : !
1061 : USE netCDF
1062 : USE m_do_err_out
1063 : !
1064 : ! !INPUT PARAMETERS:
1065 : !
1066 : INTEGER, INTENT(IN) :: ncid
1067 : !
1068 : ! !DESCRIPTION: Ends definitions of variables and their attributes.
1069 : !\\
1070 : !\\
1071 : ! !AUTHOR:
1072 : ! Jules Kouatchou
1073 : !
1074 : ! !REVISION HISTORY:
1075 : ! See https://github.com/geoschem/hemco for complete history
1076 : !EOP
1077 : !-------------------------------------------------------------------------
1078 : !BOC
1079 : !
1080 : ! !LOCAL VARIABLES:
1081 : CHARACTER (LEN=512) :: err_msg
1082 : INTEGER :: ierr
1083 : !
1084 0 : ierr = NF90_Enddef(ncid)
1085 :
1086 0 : IF (ierr.ne.NF90_NOERR) THEN
1087 0 : err_msg = 'NF90_EndDef: Error in closing netCDF define mode!'
1088 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
1089 : END IF
1090 :
1091 0 : END SUBROUTINE NcEnd_def
1092 : !EOC
1093 : !------------------------------------------------------------------------------
1094 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
1095 : ! and NASA/GSFC, SIVO, Code 610.3 !
1096 : !------------------------------------------------------------------------------
1097 : !BOP
1098 : !
1099 : ! !IROUTINE: NcBegin_Def
1100 : !
1101 : ! !INTERFACE:
1102 : !
1103 0 : SUBROUTINE NcBegin_Def(ncid)
1104 : !
1105 : ! !USES:
1106 : !
1107 : USE netCDF
1108 : USE m_do_err_out
1109 : !
1110 : ! !INPUT PARAMETERS:
1111 : !
1112 : INTEGER, INTENT(IN) :: ncid
1113 : !
1114 : ! !DESCRIPTION: Opens (or re-opens) netCDF define mode, where variables
1115 : ! and attributes can be defined.
1116 : !\\
1117 : !\\
1118 : ! !AUTHOR:
1119 : ! Jules Kouatchou
1120 : !
1121 : ! !REVISION HISTORY:
1122 : ! 14 May 2014 - R. Yantosca - Initial version
1123 : ! See https://github.com/geoschem/hemco for complete history
1124 : !EOP
1125 : !-------------------------------------------------------------------------
1126 : !BOC
1127 : !
1128 : ! !LOCAL VARIABLES:
1129 : character (len=512) :: err_msg
1130 : integer :: ierr
1131 : !
1132 0 : ierr = NF90_Redef (ncid)
1133 :
1134 0 : IF (ierr.ne.NF90_NOERR) THEN
1135 0 : err_msg = 'NF90_ReDef: Error in opening netCDF define mode!'
1136 0 : CALL Do_Err_Out (err_msg, .true., 0, 0, 0, 0, 0.0d0, 0.0d0)
1137 : END IF
1138 :
1139 0 : END SUBROUTINE NcBegin_Def
1140 : !EOC
1141 : END MODULE HCO_m_netcdf_io_define
|