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_get_dimlen
8 : !
9 : ! !INTERFACE:
10 : !
11 : module HCO_m_netcdf_io_get_dimlen
12 : !
13 : implicit none
14 : !
15 : ! !PUBLIC MEMBER FUNCTIONS:
16 : !
17 : public Ncget_Dimlen
18 : public Ncget_Unlim_Dimlen
19 : !
20 : ! !DESCRIPTION: Provides routines to obtain the length of a given dimension.
21 : !\\
22 : !\\
23 : ! !AUTHOR:
24 : ! Jules Kouatchou
25 : !
26 : ! !REVISION HISTORY:
27 : ! See https://github.com/geoschem/hemco for complete history
28 : !EOP
29 : !------------------------------------------------------------------------------
30 : !BOC
31 : CONTAINS
32 : !EOC
33 : !------------------------------------------------------------------------------
34 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
35 : ! and NASA/GSFC, SIVO, Code 610.3 !
36 : !------------------------------------------------------------------------------
37 : !BOP
38 : !
39 : ! !IROUTINE: Ncget_Dimlen
40 : !
41 : ! !INTERFACE:
42 : !
43 0 : subroutine Ncget_Dimlen(ncid, dim_name, dim_len)
44 : !
45 : ! !USES:
46 : !
47 : use netCDF
48 : use m_do_err_out
49 : !
50 : ! !INPUT PARAMETERS:
51 : !! dim_name : netCDF dimension name
52 : !! ncid : netCDF file id
53 : character (len=*), intent(in) :: dim_name
54 : integer, intent(in) :: ncid
55 : !
56 : ! !OUTPUT PARAMETERS:
57 : !! dim_len: netCDF dimension length
58 : integer, intent(out) :: dim_len
59 : !
60 : ! !DESCRIPTION: Returns the length of a given netCDF dimension.
61 : ! If err\_stop is set to FALSE, -1 is returned if
62 : ! the given dimension cannot be found. Otherwise,
63 : ! an error is prompted and the program stops.
64 : !\\
65 : !\\
66 : ! !AUTHOR:
67 : ! John Tannahill (LLNL) and Jules Kouatchou
68 : !
69 : ! !REVISION HISTORY:
70 : ! See https://github.com/geoschem/hemco for complete history
71 : !EOP
72 : !------------------------------------------------------------------------------
73 : !BOC
74 : !
75 : ! !LOCAL VARIABLES:
76 : character (len=512) :: err_msg
77 : integer :: dimid
78 : integer :: ierr
79 :
80 0 : ierr = NF90_Inq_Dimid(ncid, dim_name, dimid)
81 :
82 0 : if (ierr /= NF90_NOERR ) then
83 : err_msg = 'In Ncget_Dimlen #1: ' // Trim (dim_name) // &
84 0 : ', ' // NF90_Strerror (ierr)
85 0 : call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
86 : end if
87 :
88 0 : ierr = NF90_Inquire_Dimension(ncid, dimid, len=dim_len)
89 :
90 0 : if (ierr /= NF90_NOERR) then
91 0 : err_msg = 'In Ncget_Dimlen #2: ' // NF90_Strerror (ierr)
92 0 : call Do_Err_Out (err_msg, .true., 2, ncid, dimid, 0, 0.0d0, 0.0d0)
93 : end if
94 :
95 0 : return
96 : end subroutine Ncget_Dimlen
97 : !EOC
98 : !------------------------------------------------------------------------------
99 : ! NcdfUtilities: by Harvard Atmospheric Chemistry Modeling Group !
100 : ! and NASA/GSFC, SIVO, Code 610.3 !
101 : !------------------------------------------------------------------------------
102 : !BOP
103 : !
104 : ! !IROUTINE: Ncget_Unlim_Dimlen
105 : !
106 : ! !INTERFACE:
107 : !
108 0 : subroutine Ncget_Unlim_Dimlen (ncid, udim_len)
109 : !
110 : ! !USES:
111 : !
112 : use netCDF
113 : use m_do_err_out
114 : !
115 : ! !INPUT PARAMETERS:
116 : !! ncid : netCDF file id
117 : integer, intent(in) :: ncid
118 : !
119 : ! !OUTPUT PARAMETERS:
120 : !! udim_len : netCDF unlimited dimension length
121 : integer, intent(out) :: udim_len
122 : !
123 : ! !DESCRIPTION: Returns the length of the unlimited netCDF dimension.
124 : !\\
125 : !\\
126 : ! !AUTHOR:
127 : ! John Tannahill (LLNL) and Jules Kouatchou
128 : !
129 : ! !REVISION HISTORY:
130 : ! See https://github.com/geoschem/hemco for complete history
131 : !EOP
132 : !------------------------------------------------------------------------------
133 : !BOC
134 : !
135 : ! !LOCAL VARIABLES:
136 : character(len=512) :: err_msg
137 : integer :: ierr, udim_id
138 :
139 0 : udim_len = -1
140 0 : ierr = NF90_Inquire(ncid, unlimitedDimId=udim_id)
141 0 : IF ( ierr /= NF90_NOERR ) THEN
142 0 : ierr = NF90_Inquire_Dimension( ncid, udim_id, len=udim_len )
143 : ENDIF
144 :
145 0 : end subroutine Ncget_Unlim_Dimlen
146 : !EOC
147 : end module HCO_m_netcdf_io_get_dimlen
|