NetCDF-Fortran  4.4.3
module_netcdf_nc_data.F90
1 Module netcdf_nc_data
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 
34  USE iso_c_binding ! All subsequent USE associations of netcdf_nc_data
35  ! will inherit ISO_C_BINDING data
36 
37 ! The following will allow us to use the Fortran 2008 default intrinsic
38 ! kind variables contained in Fortran 2008 ISO_FORTRAN_ENV module when
39 ! compilers support it. Actually most of the major compilers (and even
40 ! the latest gfortran) support these now (Feb. 2012)
41 
42 #ifdef HAVE_F2008
43  USE iso_fortran_env, ONLY: real32, real64, int8, int16, int32, int64
44 #endif
45  Implicit NONE
46 
47 #include "nfconfig.inc"
48 
49 #ifndef HAVE_F2008
50 
51 ! Create our own REAL32, REAL64, INT8, INT16, INT32, INT64 if we don't have F2008
52 ! ISO_FORTRAN_ENV module
53 
54  Integer, Parameter, PRIVATE :: real32 = selected_real_kind(p=6, r=37) ! float
55  Integer, Parameter, PRIVATE :: real64 = selected_real_kind(p=13, r=307) ! double
56  Integer, Parameter, PRIVATE :: int8 = selected_int_kind( 2)
57  Integer, Parameter, PRIVATE :: int16 = selected_int_kind( 4)
58  Integer, Parameter, PRIVATE :: int32 = selected_int_kind( 9) ! int
59  Integer, Parameter, PRIVATE :: int64 = selected_int_kind(18) ! long long
60 #endif
61 
62 ! Set KIND parameters to shorter names used in f03 interface routines etc.
63 
64  Integer, Parameter :: rk4 = real32
65  Integer, Parameter :: rk8 = real64
66  Integer, Parameter :: ik1 = int8
67  Integer, Parameter :: ik2 = int16
68  Integer, Parameter :: ik4 = int32
69  Integer, Parameter :: ik8 = int64
70 
71 ! Define processor/compiler dependent parameters for ptrdiff_t, signed char,
72 ! and short types. Note prtdiff_t was not defined in the FORTRAN 2003
73 ! standard as an interoperable type in ISO_C_BINDING but was added as part of
74 ! the recent TS29113 Technical Specification "Futher Interoperability with C"
75 ! passed in 2012. For now we will make our own using C_INT32_T or C_INT64_T
76 ! but allow users to use the default definition for compilers that support
77 ! TS29113 (like gfortran 4.8). Default will be C_INTPTR_T
78 
79 #ifndef HAVE_TS29113_SUPPORT
80 #if (SIZEOF_PTRDIFF_T == 4)
81  Integer, Parameter :: c_ptrdiff_t = c_int32_t
82 #elif (SIZEOF_PTRDIFF_T == 8)
83  Integer, Parameter :: c_ptrdiff_t = c_int64_t
84 #else
85  Integer, Parameter :: c_ptrdiff_t = c_intptr_t
86 #endif
87 #endif
88 
89 ! Set KIND parameters for 1 and 2 byte integers if the system
90 ! supports them based on what is set by configure in nfconfig.inc.
91 ! The routines that use these values will issue an EBADTYPE error
92 ! and exit if C_SIGNED_CHAR and C_SHORT are not supported in
93 ! ISO_C_BINDING
94 
95 ! Set the KINDs to default integers otherwise.
96 
97 ! INT1 KINDs
98 
99 #ifdef NF_INT1_IS_C_SIGNED_CHAR
100  Integer, Parameter :: cint1 = c_signed_char
101  Integer, Parameter :: nfint1 = ik1
102 #elif NF_INT1_IS_C_SHORT
103  Integer, Parameter :: cint1 = c_short
104  Integer, Parameter :: nfint1 = ik2
105 #elif NF_INT1_IS_C_INT
106  Integer, Parameter :: cint1 = c_int
107  Integer, Parameter :: nfint1 = ik4
108 #elif NF_INT1_IS_C_LONG
109  Integer, Parameter :: cint1 = c_long
110  Integer, Parameter :: nfint1 = ik8
111 #else
112  Integer, Parameter :: cint1 = c_signed_char
113  Integer, Parameter :: nfint1 = ik1
114 #endif
115 
116 ! INT2 KINDs
117 
118 #ifdef NF_INT2_IS_C_SHORT
119  Integer, Parameter :: cint2 = c_short
120  Integer, Parameter :: nfint2 = ik2
121 #elif NF_INT2_IS_C_INT
122  Integer, Parameter :: cint2 = c_int
123  Integer, Parameter :: nfint2 = ik4
124 #elif NF_INT2_IS_C_LONG
125  Integer, Parameter :: cint2 = c_long
126  Integer, Parameter :: nfint2 = ik8
127 #else
128  Integer, Parameter :: cint2 = c_short
129  Integer, Parameter :: nfint2 = ik2
130 #endif
131 
132 ! Set Fortran default integer kind. This
133 ! should take care of the case were default
134 ! integer is a 64 bit int (ala prehistoric
135 ! CRAYS)
136 
137 #ifdef NF_INT_IS_C_LONG
138  Integer, Parameter :: cint = c_long
139  Integer, Parameter :: nfint = ik8
140 #else
141  Integer, Parameter :: cint = c_int
142  Integer, Parameter :: nfint = ik4
143 #endif
144 
145 ! Set Fortran default real kind. This should
146 ! take care of the case were the default real
147 ! type is a 64 bit real (ala prehistoric CRAYs)
148 
149 #ifdef NF_REAL_IS_C_DOUBLE
150  Integer, Parameter :: nfreal = rk8
151 #else
152  Integer, Parameter :: nfreal = rk4
153 #endif
154 
155 !--------- Define default C interface parameters from netcdf.h ---------------
156 ! This is not a complete impementation of the C header files but
157 ! defines NC_ values equivalent to the values in the netcdf.inc files
158 ! excludeing the V2 values
159 
160 ! NETCDF3 data
161 !
162 ! Define enumerator nc_type data as integers
163 
164  Integer(KIND=C_INT), Parameter :: nc_nat = 0
165  Integer(KIND=C_INT), Parameter :: nc_byte = 1
166  Integer(KIND=C_INT), Parameter :: nc_char = 2
167  Integer(KIND=C_INT), Parameter :: nc_short = 3
168  Integer(KIND=C_INT), Parameter :: nc_int = 4
169  Integer(KIND=C_INT), Parameter :: nc_float = 5
170  Integer(KIND=C_INT), Parameter :: nc_double = 6
171 
172 ! Default fill values
173 
174  Character(KIND=C_CHAR), Parameter :: nc_fill_char = c_null_char
175  Integer(KIND=C_SIGNED_CHAR), Parameter :: nc_fill_byte = -127_c_signed_char
176  Integer(KIND=C_SHORT), Parameter :: nc_fill_short = -32767_c_short
177  Integer(KIND=C_INT), Parameter :: nc_fill_int = -2147483647_c_int
178  Real(KIND=C_FLOAT), Parameter :: nc_fill_float = 9.9692099683868690e+36
179  Real(KIND=C_DOUBLE), Parameter :: nc_fill_double = 9.9692099683868690d+36
180 
181 ! Mode flags for opening and creating datasets
182 
183  Integer(KIND=C_INT), Parameter :: nc_nowrite = 0
184  Integer(KIND=C_INT), Parameter :: nc_write = 1
185  Integer(KIND=C_INT), Parameter :: nc_clobber = 0
186  Integer(KIND=C_INT), Parameter :: nc_noclobber = 4
187  Integer(KIND=C_INT), Parameter :: nc_fill = 0
188  Integer(KIND=C_INT), Parameter :: nc_nofill = 256
189  Integer(KIND=C_INT), Parameter :: nc_lock = 1024
190  Integer(KIND=C_INT), Parameter :: nc_share = 2048
191  Integer(KIND=C_INT), Parameter :: nc_strict_nc3 = 8
192  Integer(KIND=C_INT), Parameter :: nc_64bit_offset = 512
193  Integer(KIND=C_INT), Parameter :: nc_sizehint_default = 0
194  Integer(KIND=C_INT), Parameter :: nc_align_chunk = -1
195  Integer(KIND=C_INT), Parameter :: nc_format_classic = 1
196  Integer(KIND=C_INT), Parameter :: nc_format_64bit = 2
197  Integer(KIND=C_INT), Parameter :: nc_diskless = 8
198  Integer(KIND=C_INT), Parameter :: nc_mmap = 16
199 
200 
201 ! Unlimited dimension size argument and global attibute ID
202 
203  Integer(KIND=C_INT), Parameter :: nc_unlimited = 0
204  Integer(KIND=C_INT), Parameter :: nc_global = 0
205 
206 ! Implementation limits (WARNING! SHOULD BE THE SAME AS C INTERFACE)
207 
208  Integer(KIND=C_INT), Parameter :: nc_max_dims = 1024
209  Integer(KIND=C_INT), Parameter :: nc_max_attrs = 8192
210  Integer(KIND=C_INT), Parameter :: nc_max_vars = 8192
211  Integer(KIND=C_INT), Parameter :: nc_max_name = 256
212  Integer(KIND=C_INT), Parameter :: nc_max_var_dims = nc_max_dims
213 
214 ! Error codes
215 
216  Integer(KIND=C_INT), Parameter :: nc_noerr = 0
217  Integer(KIND=C_INT), Parameter :: nc2_err = -1
218  Integer(KIND=C_INT), Parameter :: nc_syserr = -31
219  Integer(KIND=C_INT), Parameter :: nc_exdr = -32
220  Integer(KIND=C_INT), Parameter :: nc_ebadid = -33
221  Integer(KIND=C_INT), Parameter :: nc_ebfile = -34
222  Integer(KIND=C_INT), Parameter :: nc_eexist = -35
223  Integer(KIND=C_INT), Parameter :: nc_einval = -36
224  Integer(KIND=C_INT), Parameter :: nc_eperm = -37
225  Integer(KIND=C_INT), Parameter :: nc_enotindefine = -38
226  Integer(KIND=C_INT), Parameter :: nc_eindefine = -39
227  Integer(KIND=C_INT), Parameter :: nc_einvalcoords = -40
228  Integer(KIND=C_INT), Parameter :: nc_emaxdims = -41
229  Integer(KIND=C_INT), Parameter :: nc_enameinuse = -42
230  Integer(KIND=C_INT), Parameter :: nc_enotatt = -43
231  Integer(KIND=C_INT), Parameter :: nc_emaxatts = -44
232  Integer(KIND=C_INT), Parameter :: nc_ebadtype = -45
233  Integer(KIND=C_INT), Parameter :: nc_ebaddim = -46
234  Integer(KIND=C_INT), Parameter :: nc_eunlimpos = -47
235  Integer(KIND=C_INT), Parameter :: nc_emaxvars = -48
236  Integer(KIND=C_INT), Parameter :: nc_enotvar = -49
237  Integer(KIND=C_INT), Parameter :: nc_eglobal = -50
238  Integer(KIND=C_INT), Parameter :: nc_enotnc = -51
239  Integer(KIND=C_INT), Parameter :: nc_ests = -52
240  Integer(KIND=C_INT), Parameter :: nc_emaxname = -53
241  Integer(KIND=C_INT), Parameter :: nc_eunlimit = -54
242  Integer(KIND=C_INT), Parameter :: nc_enorecvars = -55
243  Integer(KIND=C_INT), Parameter :: nc_echar = -56
244  Integer(KIND=C_INT), Parameter :: nc_eedge = -57
245  Integer(KIND=C_INT), Parameter :: nc_estride = -58
246  Integer(KIND=C_INT), Parameter :: nc_ebadname = -59
247  Integer(KIND=C_INT), Parameter :: nc_erange = -60
248  Integer(KIND=C_INT), Parameter :: nc_enomem = -61
249  Integer(KIND=C_INT), Parameter :: nc_evarsize = -62
250  Integer(KIND=C_INT), Parameter :: nc_edimsize = -63
251  Integer(KIND=C_INT), Parameter :: nc_etrunc = -64
252 
253 ! Error handling codes
254 
255  Integer(KIND=C_INT), Parameter :: nc_fatal = 1
256  Integer(KIND=C_INT), Parameter :: nc_verbose = 2
257 
258 #ifdef USE_NETCDF4
259 ! NETCDF4 data
260  Integer(KIND=C_INT), Parameter :: nc_format_netcdf4 = 3
261  Integer(KIND=C_INT), Parameter :: nc_format_netcdf4_classic = 4
262  Integer(KIND=C_INT), Parameter :: nc_netcdf4 = 4096
263  Integer(KIND=C_INT), Parameter :: nc_classic_model = 256
264 
265 ! extra netcdf4 types
266  Integer(KIND=C_INT), Parameter :: nc_long = nc_int
267  Integer(KIND=C_INT), Parameter :: nc_ubyte = 7
268  Integer(KIND=C_INT), Parameter :: nc_ushort = 8
269  Integer(KIND=C_INT), Parameter :: nc_uint = 9
270  Integer(KIND=C_INT), Parameter :: nc_int64 = 10
271  Integer(KIND=C_INT), Parameter :: nc_uint64 = 11
272  Integer(KIND=C_INT), Parameter :: nc_string = 12
273  Integer(KIND=C_INT), Parameter :: nc_vlen = 13
274  Integer(KIND=C_INT), Parameter :: nc_opaque = 14
275  Integer(KIND=C_INT), Parameter :: nc_enum = 15
276  Integer(KIND=C_INT), Parameter :: nc_compound = 16
277 
278 !extra netcd4 fill values
279  Integer(KIND=C_INT), Parameter :: nc_fill_ubyte = 255
280  Integer(KIND=C_INT), Parameter :: nc_fill_ushort = 65535
281  Integer(KIND=C_LONG_LONG), Parameter :: nc_fill_uint = 4294967295_c_long_long
282  Integer(KIND=C_LONG_LONG), Parameter :: nc_fill_int64 = -9223372036854775806_c_long_long
283 
284 ! extra netcdf4 variable flags
285  Integer(KIND=C_INT), Parameter :: nc_chunk_seq = 0
286  Integer(KIND=C_INT), Parameter :: nc_chunk_sub = 1
287  Integer(KIND=C_INT), Parameter :: nc_chunk_sizes = 2
288  Integer(KIND=C_INT), Parameter :: nc_endian_native = 0
289  Integer(KIND=C_INT), Parameter :: nc_endian_little = 1
290  Integer(KIND=C_INT), Parameter :: nc_endian_big = 2
291  Integer(KIND=C_INT), Parameter :: nc_chunked = 0
292  Integer(KIND=C_INT), Parameter :: nc_notcontiguous = 0
293  Integer(KIND=C_INT), Parameter :: nc_contiguous = 1
294  Integer(KIND=C_INT), Parameter :: nc_nochecksum = 0
295  Integer(KIND=C_INT), Parameter :: nc_fletcher32 = 1
296  Integer(KIND=C_INT), Parameter :: nc_noshuffle = 0
297  Integer(KIND=C_INT), Parameter :: nc_shuffle = 1
298  Integer(KIND=C_INT), Parameter :: nc_independent = 0
299  Integer(KIND=C_INT), Parameter :: nc_collective = 1
300 
301 ! flags for parallel i/o
302 
303  Integer(KIND=C_INT), Parameter :: nc_mpiio = 8192
304  Integer(KIND=C_INT), Parameter :: nc_mpiposix = 16384
305  Integer(KIND=C_INT), Parameter :: nc_pnetcdf = 32768
306 
307  Integer(KIND=C_INT), Parameter :: nc_szip_ec_option_mask = 4
308  Integer(KIND=C_INT), Parameter :: nc_szip_nn_option_mask = 32
309 
310 ! extra netcdf4 error flags
311  Integer(KIND=C_INT), Parameter :: nc_ehdferr = -101
312  Integer(KIND=C_INT), Parameter :: nc_ecantread = -102
313  Integer(KIND=C_INT), Parameter :: nc_ecantwrite = -103
314  Integer(KIND=C_INT), Parameter :: nc_ecantcreate = -104
315  Integer(KIND=C_INT), Parameter :: nc_efilemeta = -105
316  Integer(KIND=C_INT), Parameter :: nc_edimmeta = -106
317  Integer(KIND=C_INT), Parameter :: nc_eattmeta = -107
318  Integer(KIND=C_INT), Parameter :: nc_evarmeta = -108
319  Integer(KIND=C_INT), Parameter :: nc_enocompound = -109
320  Integer(KIND=C_INT), Parameter :: nc_eattexists = -110
321  Integer(KIND=C_INT), Parameter :: nc_enotnc4 = -111
322  Integer(KIND=C_INT), Parameter :: nc_estrictnc3 = -112
323  Integer(KIND=C_INT), Parameter :: nc_enotnc3 = -113
324  Integer(KIND=C_INT), Parameter :: nc_enopar = -114
325  Integer(KIND=C_INT), Parameter :: nc_eparinit = -115
326  Integer(KIND=C_INT), Parameter :: nc_ebadgrpid = -116
327  Integer(KIND=C_INT), Parameter :: nc_ebadtypid = -117
328  Integer(KIND=C_INT), Parameter :: nc_etypdefined = -118
329  Integer(KIND=C_INT), Parameter :: nc_ebadfield = -119
330  Integer(KIND=C_INT), Parameter :: nc_ebadclass = -120
331  Integer(KIND=C_INT), Parameter :: nc_emaptype = -121
332  Integer(KIND=C_INT), Parameter :: nc_elatefill = -122
333  Integer(KIND=C_INT), Parameter :: nc_elatedef = -123
334  Integer(KIND=C_INT), Parameter :: nc_edimscale = -124
335  Integer(KIND=C_INT), Parameter :: nc_enogrp = -125
336 #endif
337 !------------------------------------------------------------------------------
338 End Module netcdf_nc_data

Return to the Main Unidata NetCDF page.
Generated on Sun Mar 27 2016 13:46:12 for NetCDF-Fortran. NetCDF is a Unidata library.