NetCDF-Fortran  4.4.4
 All Classes Files Functions Variables Typedefs Macros Pages
module_netcdf_nc_data.F90
Go to the documentation of this file.
2 
3 ! Data types and flags for Fortran2003 interfaces to NetCDF C routines
4 !
5 ! Written by: Richard Weed, Ph.D.
6 ! Center for Advanced Vehicular Systems
7 ! Mississippi State University
8 ! rweed@cavs.msstate.edu
9 
10 
11 ! License (and other Lawyer Language)
12 
13 ! This software is released under the Apache 2.0 Open Source License. The
14 ! full text of the License can be viewed at :
15 !
16 ! http:www.apache.org/licenses/LICENSE-2.0.html
17 !
18 ! The author grants to the University Corporation for Atmospheric Research
19 ! (UCAR), Boulder, CO, USA the right to revise and extend the software
20 ! without restriction. However, the author retains all copyrights and
21 ! intellectual property rights explicitly stated in or implied by the
22 ! Apache license
23 
24 ! Version 1.: Sept. 2005 - Initial Cray X1 version
25 ! Version 2.: May 2006 - Updated to support g95
26 ! Version 3.: June 2006 - Updated to include netCDF 4 functions
27 ! Version 4.: July 2007 - Modified to work with 3.6.2 build system
28 ! Version 5.: April 2009 - Updated to NetCDF 4.0.1
29 ! Version 6.: April 2010 - Updated to NetCDF 4.1.1
30 ! Version 7.: Feb. 2012 - Added support for F2008 Intrinsic kinds
31 ! Version 8.: Feb. 2013 - Updated for netcdf fortran-4.4
32 ! Version 9.: April 2014 - Changed C_PTRDIFF_T to UCAR definitions
33 ! Version 10.: Jan. 2016 - General code cleanup. Added a definition
34 ! for a C_ENUM kind paramater for future
35 ! code mods. Added several new parameters
36 ! to include all of the values supported
37 ! in netcdf_constant.f90
38 
39  USE iso_c_binding ! All subsequent USE associations of netcdf_nc_data
40  ! will inherit ISO_C_BINDING data
41 
42 ! The following will allow us to use the Fortran 2008 default intrinsic
43 ! kind variables contained in Fortran 2008 ISO_FORTRAN_ENV module when
44 ! compilers support it. Actually most of the major compilers (and even
45 ! the latest gfortran) support these now (Feb. 2012)
46 
47 #ifdef HAVE_F2008
48  USE iso_fortran_env, ONLY: real32, real64, int8, int16, int32, int64
49 #endif
50  Implicit NONE
51 
52 #include "nfconfig.inc"
53 
54 ! All of the stuff inside this ifndef black needs to be moved to a
55 ! stantdalone module and combined with the f90 interfaces typesizes
56 ! module
57 
58 #ifndef HAVE_F2008
59 
60 ! Create our own REAL32, REAL64, INT8, INT16, INT32, INT64 if we don't have F2008
61 ! ISO_FORTRAN_ENV module
62 
63  Integer, Parameter, PRIVATE :: REAL32 = SELECTED_REAL_KIND(P=6, R=37) ! float
64  Integer, Parameter, PRIVATE :: REAL64 = SELECTED_REAL_KIND(P=13, R=307) ! double
65  Integer, Parameter, PRIVATE :: INT8 = SELECTED_INT_KIND( 2)
66  Integer, Parameter, PRIVATE :: INT16 = SELECTED_INT_KIND( 4)
67  Integer, Parameter, PRIVATE :: INT32 = SELECTED_INT_KIND( 9) ! int
68  Integer, Parameter, PRIVATE :: INT64 = SELECTED_INT_KIND(18) ! long long
69 #endif
70 
71 ! Set KIND parameters to shorter names used in f03 interface routines etc.
72 
73  Integer, Parameter :: RK4 = REAL32
74  Integer, Parameter :: RK8 = REAL64
75  Integer, Parameter :: IK1 = INT8
76  Integer, Parameter :: IK2 = INT16
77  Integer, Parameter :: IK4 = INT32
78  Integer, Parameter :: IK8 = INT64
79 
80 ! Define processor/compiler dependent parameters for ptrdiff_t, signed char,
81 ! and short types. Note prtdiff_t was not defined in the FORTRAN 2003
82 ! standard as an interoperable type in ISO_C_BINDING but was added as part of
83 ! the recent TS29113 Technical Specification "Futher Interoperability with C"
84 ! passed in 2012. For now we will make our own using C_INT32_T or C_INT64_T
85 ! but allow users to use the default definition for compilers that support
86 ! TS29113 (like gfortran 4.8). Default will be C_INTPTR_T
87 
88 #ifndef HAVE_TS29113_SUPPORT
89 #if (SIZEOF_PTRDIFF_T == 4)
90  Integer, Parameter :: C_PTRDIFF_T = C_INT32_T
91 #elif (SIZEOF_PTRDIFF_T == 8)
92  Integer, Parameter :: C_PTRDIFF_T = C_INT64_T
93 #else
94  Integer, Parameter :: C_PTRDIFF_T = C_INTPTR_T
95 #endif
96 #endif
97 
98 ! Set KIND parameters for 1 and 2 byte integers if the system
99 ! supports them based on what is set by configure in nfconfig.inc.
100 ! The routines that use these values will issue an EBADTYPE error
101 ! and exit if C_SIGNED_CHAR and C_SHORT are not supported in
102 ! ISO_C_BINDING
103 
104 ! Set the KINDs to default integers otherwise.
105 
106 ! INT1 KINDs
107 
108 #ifdef NF_INT1_IS_C_SIGNED_CHAR
109  Integer, Parameter :: CINT1 = C_SIGNED_CHAR
110  Integer, Parameter :: NFINT1 = IK1
111 #elif NF_INT1_IS_C_SHORT
112  Integer, Parameter :: CINT1 = C_SHORT
113  Integer, Parameter :: NFINT1 = IK2
114 #elif NF_INT1_IS_C_INT
115  Integer, Parameter :: CINT1 = C_INT
116  Integer, Parameter :: NFINT1 = IK4
117 #elif NF_INT1_IS_C_LONG
118  Integer, Parameter :: CINT1 = C_LONG
119  Integer, Parameter :: NFINT1 = IK8
120 #else
121  Integer, Parameter :: CINT1 = C_SIGNED_CHAR
122  Integer, Parameter :: NFINT1 = IK1
123 #endif
124 
125 ! INT2 KINDs
126 
127 #ifdef NF_INT2_IS_C_SHORT
128  Integer, Parameter :: CINT2 = C_SHORT
129  Integer, Parameter :: NFINT2 = IK2
130 #elif NF_INT2_IS_C_INT
131  Integer, Parameter :: CINT2 = C_INT
132  Integer, Parameter :: NFINT2 = IK4
133 #elif NF_INT2_IS_C_LONG
134  Integer, Parameter :: CINT2 = C_LONG
135  Integer, Parameter :: NFINT2 = IK8
136 #else
137  Integer, Parameter :: CINT2 = C_SHORT
138  Integer, Parameter :: NFINT2 = IK2
139 #endif
140 
141 ! Set Fortran default integer kind. This
142 ! should take care of the case were default
143 ! integer is a 64 bit int (ala prehistoric
144 ! CRAYS)
145 
146 #ifdef NF_INT_IS_C_LONG
147  Integer, Parameter :: CINT = C_LONG
148  Integer, Parameter :: NFINT = IK8
149 #else
150  Integer, Parameter :: CINT = C_INT
151  Integer, Parameter :: NFINT = IK4
152 #endif
153 
154 ! Set Fortran default real kind. This should
155 ! take care of the case were the default real
156 ! type is a 64 bit real (ala prehistoric CRAYs)
157 
158 #ifdef NF_REAL_IS_C_DOUBLE
159  Integer, Parameter :: NFREAL = RK8
160 #else
161  Integer, Parameter :: NFREAL = RK4
162 #endif
163 
164 ! Create a C_ENUM kind which should be just C_INT (but you never know).
165 ! Don't know why this wasn't included in the C Interop standard but it
166 ! would have been nice to have.
167 
168 ! This will eventually be used to replace the current integer values in the
169 ! interfaces with something that should be consistent with C enum data
170 ! types. Mostly this is cosmetic to identify in the code that we are
171 ! passing something that is a enumerator member in C.
172 
173  enum, bind(c)
174  enumerator :: dummy
175  End enum
176 
177  Private :: dummy
178 
179  Integer, Parameter :: C_ENUM = KIND(dummy)
180 
181 
182 !--------- Define default C interface parameters from netcdf.h ---------------
183 
184 ! This is not a complete impementation of the C header files but
185 ! defines NC_ values equivalent to the values in the netcdf.inc files
186 ! excluding the V2 values
187 
188 ! NETCDF3 data
189 !
190 ! Define enumerator nc_type data as integers
191 
192  Integer(C_INT), Parameter :: NC_NAT = 0
193  Integer(C_INT), Parameter :: NC_BYTE = 1
194  Integer(C_INT), Parameter :: NC_CHAR = 2
195  Integer(C_INT), Parameter :: NC_SHORT = 3
196  Integer(C_INT), Parameter :: NC_INT = 4
197  Integer(C_INT), Parameter :: NC_FLOAT = 5
198  Integer(C_INT), Parameter :: NC_DOUBLE = 6
199 
200 ! Default fill values
201 
202  Character(KIND=C_CHAR), Parameter :: NC_FILL_CHAR = C_NULL_CHAR
203  Integer(C_SIGNED_CHAR), Parameter :: NC_FILL_BYTE = -127_C_SIGNED_CHAR
204  Integer(C_SHORT), Parameter :: NC_FILL_SHORT = -32767_C_SHORT
205  Integer(C_INT), Parameter :: NC_FILL_INT = -2147483647_C_INT
206  Real(C_FLOAT), Parameter :: NC_FILL_FLOAT = 9.9692099683868690E+36
207  Real(C_DOUBLE), Parameter :: NC_FILL_DOUBLE = 9.9692099683868690D+36
208 
209 ! Mode flags for opening and creating datasets
210 
211  Integer(C_INT), Parameter :: NC_NOWRITE = 0
212  Integer(C_INT), Parameter :: NC_WRITE = 1
213  Integer(C_INT), Parameter :: NC_CLOBBER = 0
214  Integer(C_INT), Parameter :: NC_NOCLOBBER = 4
215  Integer(C_INT), Parameter :: NC_FILL = 0
216  Integer(C_INT), Parameter :: NC_NOFILL = 256
217  Integer(C_INT), Parameter :: NC_LOCK = 1024
218  Integer(C_INT), Parameter :: NC_SHARE = 2048
219  Integer(C_INT), Parameter :: NC_STRICT_NC3 = 8
220  Integer(C_INT), Parameter :: NC_64BIT_OFFSET = 512
221  Integer(C_INT), Parameter :: NC_SIZEHINT_DEFAULT = 0
222  Integer(C_INT), Parameter :: NC_ALIGN_CHUNK = -1
223  Integer(C_INT), Parameter :: NC_FORMAT_CLASSIC = 1
224  Integer(C_INT), Parameter :: NC_FORMAT_64BIT = 2
225  Integer(C_INT), Parameter :: NC_DISKLESS = 8
226  Integer(C_INT), Parameter :: NC_MMAP = 16
227  Integer(C_INT), Parameter :: NC_INMEMORY = 32768
228 
229 ! Unlimited dimension size argument and global attibute ID
230 
231  Integer(C_INT), Parameter :: NC_UNLIMITED = 0
232  Integer(C_INT), Parameter :: NC_GLOBAL = 0
233 
234 ! Implementation limits (WARNING! SHOULD BE THE SAME AS C INTERFACE)
235 
236  Integer(C_INT), Parameter :: NC_MAX_DIMS = 1024
237  Integer(C_INT), Parameter :: NC_MAX_ATTRS = 8192
238  Integer(C_INT), Parameter :: NC_MAX_VARS = 8192
239  Integer(C_INT), Parameter :: NC_MAX_NAME = 256
240  Integer(C_INT), Parameter :: NC_MAX_VAR_DIMS = NC_MAX_DIMS
241 
242 ! Error codes
243 
244  Integer(C_INT), Parameter :: NC_NOERR = 0
245  Integer(C_INT), Parameter :: NC2_ERR = -1
246  Integer(C_INT), Parameter :: NC_SYSERR = -31
247  Integer(C_INT), Parameter :: NC_EXDR = -32
248  Integer(C_INT), Parameter :: NC_EBADID = -33
249  Integer(C_INT), Parameter :: NC_EBFILE = -34
250  Integer(C_INT), Parameter :: NC_EEXIST = -35
251  Integer(C_INT), Parameter :: NC_EINVAL = -36
252  Integer(C_INT), Parameter :: NC_EPERM = -37
253  Integer(C_INT), Parameter :: NC_ENOTINDEFINE = -38
254  Integer(C_INT), Parameter :: NC_EINDEFINE = -39
255  Integer(C_INT), Parameter :: NC_EINVALCOORDS = -40
256  Integer(C_INT), Parameter :: NC_EMAXDIMS = -41
257  Integer(C_INT), Parameter :: NC_ENAMEINUSE = -42
258  Integer(C_INT), Parameter :: NC_ENOTATT = -43
259  Integer(C_INT), Parameter :: NC_EMAXATTS = -44
260  Integer(C_INT), Parameter :: NC_EBADTYPE = -45
261  Integer(C_INT), Parameter :: NC_EBADDIM = -46
262  Integer(C_INT), Parameter :: NC_EUNLIMPOS = -47
263  Integer(C_INT), Parameter :: NC_EMAXVARS = -48
264  Integer(C_INT), Parameter :: NC_ENOTVAR = -49
265  Integer(C_INT), Parameter :: NC_EGLOBAL = -50
266  Integer(C_INT), Parameter :: NC_ENOTNC = -51
267  Integer(C_INT), Parameter :: NC_ESTS = -52
268  Integer(C_INT), Parameter :: NC_EMAXNAME = -53
269  Integer(C_INT), Parameter :: NC_EUNLIMIT = -54
270  Integer(C_INT), Parameter :: NC_ENORECVARS = -55
271  Integer(C_INT), Parameter :: NC_ECHAR = -56
272  Integer(C_INT), Parameter :: NC_EEDGE = -57
273  Integer(C_INT), Parameter :: NC_ESTRIDE = -58
274  Integer(C_INT), Parameter :: NC_EBADNAME = -59
275  Integer(C_INT), Parameter :: NC_ERANGE = -60
276  Integer(C_INT), Parameter :: NC_ENOMEM = -61
277  Integer(C_INT), Parameter :: NC_EVARSIZE = -62
278  Integer(C_INT), Parameter :: NC_EDIMSIZE = -63
279  Integer(C_INT), Parameter :: NC_ETRUNC = -64
280  Integer(C_INT), Parameter :: NC_EAXISTYPE = -65
281 
282 ! DAP error codes
283 
284  Integer(C_INT), Parameter :: NC_EDAP = -66
285  Integer(C_INT), Parameter :: NC_ECURL = -67
286  Integer(C_INT), Parameter :: NC_EIO = -68
287  Integer(C_INT), Parameter :: NC_ENODATA = -69
288  Integer(C_INT), Parameter :: NC_EDAPSVC = -70
289  Integer(C_INT), Parameter :: NC_EDAS = -71
290  Integer(C_INT), Parameter :: NC_EDDS = -72
291  Integer(C_INT), Parameter :: NC_EDATADDS = -73
292  Integer(C_INT), Parameter :: NC_EDAPURL = -74
293  Integer(C_INT), Parameter :: NC_EDAPCONSTRAINT = -75
294  Integer(C_INT), Parameter :: NC_ETRANSLATION = -76
295 
296 ! Error handling codes
297 
298  Integer(C_INT), Parameter :: NC_FATAL = 1
299  Integer(C_INT), Parameter :: NC_VERBOSE = 2
300 
301 #ifdef USE_NETCDF4
302 
303 ! NETCDF4 data
304 
305  Integer(C_INT), Parameter :: NC_FORMAT_NETCDF4 = 3
306  Integer(C_INT), Parameter :: NC_FORMAT_NETCDF4_CLASSIC = 4
307  Integer(C_INT), Parameter :: NC_NETCDF4 = 4096
308  Integer(C_INT), Parameter :: NC_CLASSIC_MODEL = 256
309 
310 ! extra netcdf4 types
311 
312  Integer(C_INT), Parameter :: NC_LONG = NC_INT
313  Integer(C_INT), Parameter :: NC_UBYTE = 7
314  Integer(C_INT), Parameter :: NC_USHORT = 8
315  Integer(C_INT), Parameter :: NC_UINT = 9
316  Integer(C_INT), Parameter :: NC_INT64 = 10
317  Integer(C_INT), Parameter :: NC_UINT64 = 11
318  Integer(C_INT), Parameter :: NC_STRING = 12
319  Integer(C_INT), Parameter :: NC_VLEN = 13
320  Integer(C_INT), Parameter :: NC_OPAQUE = 14
321  Integer(C_INT), Parameter :: NC_ENUM = 15
322  Integer(C_INT), Parameter :: NC_COMPOUND = 16
323 
324 ! extra netcd4 fill values
325 
326  Integer(C_INT), Parameter :: NC_FILL_UBYTE = 255
327  Integer(C_INT), Parameter :: NC_FILL_USHORT = 65535
328  Integer(C_LONG_LONG), Parameter :: NC_FILL_UINT = 4294967295_C_LONG_LONG
329  Integer(C_LONG_LONG), Parameter :: NC_FILL_INT64 = -9223372036854775806_C_LONG_LONG
330 
331 ! extra netcdf4 variable flags
332 
333  Integer(C_INT), Parameter :: NC_CHUNK_SEQ = 0
334  Integer(C_INT), Parameter :: NC_CHUNK_SUB = 1
335  Integer(C_INT), Parameter :: NC_CHUNK_SIZES = 2
336  Integer(C_INT), Parameter :: NC_ENDIAN_NATIVE = 0
337  Integer(C_INT), Parameter :: NC_ENDIAN_LITTLE = 1
338  Integer(C_INT), Parameter :: NC_ENDIAN_BIG = 2
339  Integer(C_INT), Parameter :: NC_CHUNKED = 0
340  Integer(C_INT), Parameter :: NC_NOTCONTIGUOUS = 0
341  Integer(C_INT), Parameter :: NC_CONTIGUOUS = 1
342  Integer(C_INT), Parameter :: NC_NOCHECKSUM = 0
343  Integer(C_INT), Parameter :: NC_FLETCHER32 = 1
344  Integer(C_INT), Parameter :: NC_NOSHUFFLE = 0
345  Integer(C_INT), Parameter :: NC_SHUFFLE = 1
346  Integer(C_INT), Parameter :: NC_INDEPENDENT = 0
347  Integer(C_INT), Parameter :: NC_COLLECTIVE = 1
348 
349 ! flags for parallel i/o
350 
351  Integer(C_INT), Parameter :: NC_MPIIO = 8192
352  Integer(C_INT), Parameter :: NC_MPIPOSIX = 16384
353  Integer(C_INT), Parameter :: NC_PNETCDF = NC_MPIIO
354 
355  Integer(C_INT), Parameter :: NC_SZIP_EC_OPTION_MASK = 4
356  Integer(C_INT), Parameter :: NC_SZIP_NN_OPTION_MASK = 32
357 
358 ! extra netcdf4 error flags
359 
360  Integer(C_INT), Parameter :: NC_EHDFERR = -101
361  Integer(C_INT), Parameter :: NC_ECANTREAD = -102
362  Integer(C_INT), Parameter :: NC_ECANTWRITE = -103
363  Integer(C_INT), Parameter :: NC_ECANTCREATE = -104
364  Integer(C_INT), Parameter :: NC_EFILEMETA = -105
365  Integer(C_INT), Parameter :: NC_EDIMMETA = -106
366  Integer(C_INT), Parameter :: NC_EATTMETA = -107
367  Integer(C_INT), Parameter :: NC_EVARMETA = -108
368  Integer(C_INT), Parameter :: NC_ENOCOMPOUND = -109
369  Integer(C_INT), Parameter :: NC_EATTEXISTS = -110
370  Integer(C_INT), Parameter :: NC_ENOTNC4 = -111
371  Integer(C_INT), Parameter :: NC_ESTRICTNC3 = -112
372  Integer(C_INT), Parameter :: NC_ENOTNC3 = -113
373  Integer(C_INT), Parameter :: NC_ENOPAR = -114
374  Integer(C_INT), Parameter :: NC_EPARINIT = -115
375  Integer(C_INT), Parameter :: NC_EBADGRPID = -116
376  Integer(C_INT), Parameter :: NC_EBADTYPID = -117
377  Integer(C_INT), Parameter :: NC_ETYPDEFINED = -118
378  Integer(C_INT), Parameter :: NC_EBADFIELD = -119
379  Integer(C_INT), Parameter :: NC_EBADCLASS = -120
380  Integer(C_INT), Parameter :: NC_EMAPTYPE = -121
381  Integer(C_INT), Parameter :: NC_ELATEFILL = -122
382  Integer(C_INT), Parameter :: NC_ELATEDEF = -123
383  Integer(C_INT), Parameter :: NC_EDIMSCALE = -124
384  Integer(C_INT), Parameter :: NC_ENOGRP = -125
385  Integer(C_INT), Parameter :: NC_ESTORAGE = -126
386  Integer(C_INT), Parameter :: NC_EBADCHUNK = -127
387  Integer(C_INT), Parameter :: NC_ENOTBUILT = -128
388  Integer(C_INT), Parameter :: NC_EDISKLESS = -129
389  Integer(C_INT), Parameter :: NC_ECANTEXTEND = -130
390  Integer(C_INT), Parameter :: NC_EMPI = -131
391 
392 #endif
393 
394 !------------------------------------------------------------------------------
395 End Module netcdf_nc_data

Return to the Main Unidata NetCDF page.
Generated on Mon Dec 19 2016 16:43:42 for NetCDF-Fortran. NetCDF is a Unidata library.