File: module_tests.F90

package info (click to toggle)
netcdf-fortran 4.4.4%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 8,420 kB
  • ctags: 8,797
  • sloc: fortran: 51,087; f90: 20,357; sh: 11,601; ansic: 7,034; makefile: 548; pascal: 313; xml: 173
file content (255 lines) | stat: -rwxr-xr-x 8,543 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
      Module tests
!/*********************************************************************
! *   Copyright 1996, UCAR/Unidata
! *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
! *   $Id: tests.inc,v 1.15 2007/01/19 16:08:47 ed Exp $
! *********************************************************************/

! Implementation of test.inc in a module
! Modified by: Richard Weed,Ph.D
!              Center for Advanced Vehicular Systems
!              Mississippi State University
!              rweed@cavs.msstate.edu

!!!!
! Do not tabify this unless you like hitting the 72 char limit !!!
!!!
#ifndef UD_TESTS_INC
#define UD_TESTS_INC


!/* The following prevents non-FORTRAN code from appearing in the output. */
#if defined(__osf__)
#   undef _POSIX_SOURCE
#   define _POSIX_SOURCE
#endif

#if defined(NO_NETCDF_2)
#  undef NO_NETCDF_2
#  define NO_NETCDF_2 1
#else
#define NO_NETCDF_2 1
#endif

#include "nfconfig.inc"
#ifdef USE_NETCDF4
       USE netcdf4_f03
#else
       USE netcdf_f03
#endif
 
       Implicit NONE

       SAVE
!/* Parameters of test data */

#ifdef  NF_INT1_T
#   define NF_B 1
#else
#   define NF_B 0
#endif
#ifdef  NF_INT2_T
#   define NF_S 1
#else
#   define NF_S 0
#endif
! Total number of FORTRAN types:
       Integer, Parameter :: NUM_FORTRAN_TYPES = (3 + NF_S + NF_B)
#undef NF_B
#undef NF_S

      Integer, Parameter :: NTYPES=6
      Integer, Parameter :: NDIMS=5
      Integer, Parameter :: NVARS=136
      Integer, Parameter :: NRECS=2
      Integer, Parameter :: NGATTS=NTYPES
      Integer, Parameter :: RECDIM=1
      Integer, Parameter :: MAX_RANK=3
      Integer, Parameter :: MAX_NELS=64
      Integer, Parameter :: MAX_DIM_LEN=4
      Integer, Parameter :: MAX_NATTS=3


!/*
! * Limits of external types (based on those in ncx.h):
! */
      Integer, Parameter :: X_CHAR_MIN=0
      Integer, Parameter :: X_CHAR_MAX=127
      Integer, Parameter :: X_INT1_MIN=(-128)
      Integer, Parameter :: X_INT1_MAX=127
      Integer, Parameter :: X_INT2_MIN=(-32768)
      Integer, Parameter :: X_INT2_MAX=32767
      Integer, Parameter :: X_INT_MIN=(-2147483647-1)
      Integer, Parameter :: X_INT_MAX=2147483647
#if 0
      Real(RK4), Parameter :: X_REAL_MAX=3.4028234663852886e+38
#else
      Real(RK4), Parameter :: X_REAL_MAX=3.4028234663852886e+37
#endif
      Real(RK4), Parameter :: X_REAL_MIN=(-X_REAL_MAX)
#if 0
      Real(RK8), Parameter :: X_DOUBLE_MAX=1.7976931348623157E+308
#else
      Real(RK8), Parameter :: X_DOUBLE_MAX=1.7976931348623157D+200
#endif
      Real(RK8), Parameter :: X_DOUBLE_MIN=(-X_DOUBLE_MAX)

      Integer, Parameter :: X_BYTE_MIN=X_INT1_MIN
      Integer, Parameter :: X_BYTE_MAX=X_INT1_MAX
      Integer, Parameter :: X_SHORT_MIN=X_INT2_MIN
      Integer, Parameter :: X_SHORT_MAX=X_INT2_MAX
      Real(RK4), Parameter :: X_FLOAT_MIN=X_REAL_MIN
      Real(RK4), Parameter :: X_FLOAT_MAX=X_REAL_MAX


!/*
! * Examples of invalid argument values:
! */
      Integer, Parameter :: BAD_ID=-1
      Integer, Parameter :: BAD_DIMID=-1
      Integer, Parameter :: BAD_VARID=-2
      Integer, Parameter :: BAD_ATTNUM=-1
      Integer, Parameter :: BAD_TYPE=0
      Integer, Parameter :: BAD_FILLMODE=-1
      Character*3, Parameter :: BAD_NAME='a/b'


!/*
! * Internal data types:
! */
      Integer, Parameter :: NFT_UNSPECIFIED=0
      Integer, Parameter :: NFT_TEXT=16
      Integer, Parameter :: NFT_CHAR=NFT_TEXT
      Integer, Parameter :: NFT_INT1=17
      Integer, Parameter :: NFT_INT2=18
      Integer, Parameter :: NFT_INT=20
      Integer, Parameter :: NFT_REAL=36
      Integer, Parameter :: NFT_DOUBLE=40


!/*
! * Define a macro for trimming trailing blanks from character variables.
! */
#define TRIM(string) string(1:len_trim(string))


!
! FORTRAN GETARG() subroutine:
!
#ifdef __hpux
#   define      getarg  getarg_
#endif


#endif /* UD_TESTS_INC */


! #include "../fortran/netcdf.inc"


!    /* Global variables - filenames */

      CHARACTER(LEN=80) ::   testfile   !/* netCDF read-only test data */
      CHARACTER(LEN=80) ::   scratch    !/* netCDF test file for writing */

!    /* Global variables - command-line arguments */

      LOGICAL :: CREATE_FILE
      LOGICAL :: READONLY
      LOGICAL :: VERBOSE
      INTEGER :: NFAILS
      INTEGER :: MAX_NMPT        !/* max num messages per test */

!    /* Global variables - test data */

      CHARACTER(LEN=2)            :: DIM_NAME(NDIMS)
      INTEGER                     :: DIM_LEN(NDIMS)
      CHARACTER(LEN=(2+MAX_RANK)) :: VAR_NAME(NVARS)
      INTEGER                     :: VAR_TYPE(NVARS)
      INTEGER                     :: VAR_RANK(NVARS)
      INTEGER                     :: VAR_DIMID(MAX_RANK,NVARS)
      INTEGER                     :: VAR_SHAPE(MAX_RANK,NVARS)
      INTEGER                     :: VAR_NELS(NVARS)
      INTEGER                     :: VAR_NATTS(NVARS)
      CHARACTER(LEN=2)            :: ATTNAME(MAX_NATTS,NVARS)
      CHARACTER(LEN=2)            :: GATT_NAME(NGATTS)
      INTEGER                     :: ATTTYPE(NGATTS,NVARS)
      INTEGER                     :: GATT_TYPE(NGATTS)
      INTEGER                     :: ATTLEN(MAX_NATTS,NVARS)
      INTEGER                     :: GATT_LEN(NGATTS)

!    /* Miscellaneous global variables: */
      CHARACTER(LEN=80) :: PROGNAME        !/* name of the program */
      INTEGER           :: NFAILSTOTAL

!    /* Common blocks for global variables: */

!     COMMON    /LOGCOM/        CREATE_FILE,                            &
!    &                          READONLY,                               & 
!    &                          VERBOSE        

!     COMMON    /TXTCOM/        TESTFILE,                               &
!    &                          SCRATCH,                                &
!    &                          DIM_NAME,                               &
!    &                          VAR_NAME,                               &
!    &                          ATTNAME,                                &
!    &                          GATT_NAME,                              &
!    &                          PROGNAME

!     COMMON    /INTCOM/        NFAILS,                                 &  
!    &                          DIM_LEN,                                &
!    &                          VAR_TYPE,                               &
!    &                          VAR_RANK,                               &
!    &                          VAR_DIMID,                              &
!    &                          VAR_SHAPE,                              &
!    &                          VAR_NELS,                               &
!    &                          VAR_NATTS,                              &
!    &                          ATTTYPE,                                &
!    &                          GATT_TYPE,                              &
!    &                          ATTLEN,                                 &
!    &                          GATT_LEN,                               &
!    &                          MAX_NMPT,                               &
!    &                          NFAILSTOTAL


!    /* Functions for accessing attribute test data */
!    /* varid is -1 for NC_GLOBAL so can do global atts in same loop */

!/*      EXTERNAL       ATT_NAME */

      INTEGER, EXTERNAL           :: VARID
      INTEGER, EXTERNAL           :: NATTS
      CHARACTER(LEN=2), EXTERNAL  :: ATT_NAME
      INTEGER, EXTERNAL           :: ATT_TYPE
      INTEGER, EXTERNAL           :: ATT_LEN


      LOGICAL, EXTERNAL   :: INRANGE
      LOGICAL, EXTERNAL   :: INRANGE_UCHAR
      LOGICAL, EXTERNAL   :: INRANGE_FLOAT
      LOGICAL, EXTERNAL   :: INRANGE3
      LOGICAL, EXTERNAL   :: IN_INTERNAL_RANGE
      LOGICAL, EXTERNAL   :: EQUAL
      LOGICAL, EXTERNAL   :: INT_VEC_EQ

      INTEGER, EXTERNAL   :: ROLL
      INTEGER, EXTERNAL   :: INDEX2INDEXES
      INTEGER, EXTERNAL   :: INDEX2NCINDEXES
      INTEGER, EXTERNAL   :: INDEXES2INDEX
      INTEGER, EXTERNAL   :: NC2DBL
      INTEGER, EXTERNAL   :: DBL2NC
!      INTEGER, EXTERNAL   :: LEN_TRIM
      REAL(RK8), EXTERNAL :: HASH
      REAL(RK8), EXTERNAL :: HASH4
      REAL(RK8), EXTERNAL :: HASH_TEXT
      REAL(RK8), EXTERNAL :: HASH_INT1
      REAL(RK8), EXTERNAL :: HASH_INT2
      REAL(RK8), EXTERNAL :: HASH_INT
      REAL(RK8), EXTERNAL :: HASH_REAL
      REAL(RK8), EXTERNAL :: HASH_DOUBLE
      REAL(RK8), EXTERNAL :: INTERNAL_MIN
      REAL(RK8), EXTERNAL :: INTERNAL_MAX
      REAL(RK8), EXTERNAL :: EXTERNAL_MIN
      REAL(RK8), EXTERNAL :: EXTERNAL_MAX

      End Module tests