1/*********************************************************************
2 *   Copyright 2008, University Corporation for Atmospheric Research
3 *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
4 *   $Id: nctime.h,v 1.6 2010/03/18 19:24:26 russ Exp $
5 *********************************************************************/
6
7struct bounds_node{
8    int ncid;   /* group (or file) in which variable with associated
9    * bounds variable resides */
10    int varid; /* has "bounds" attribute naming its bounds variable */
11    char *bounds_name; /* the named variable, which stores bounds for varid */
12    struct bounds_node *next; /* next node on list or NULL ifn last list node */
13};
14
15typedef struct bounds_node bounds_node_t;
16
17/*
18 * This code was extracted with permission from the CDMS time
19 * conversion and arithmetic routines developed by Bob Drach, Lawrence
20 * Livermore National Laboratory as part of the cdtime library.
21 * Changes and additions were made to support the "-t" option of the
22 * netCDF ncdump utility.
23 *
24 * For the complete time conversion and climate calendar facilities of
25 * the CDMS library, get the original sources from LLNL.
26 */
27
28#define CD_MAX_RELUNITS 64 /* Max characters in relative units */
29#define CD_MAX_CHARTIME 48 /* Max characters in character time */
30#define CD_NULL_DAY 1 /* Null day value */
31#define CD_NULL_HOUR 0.0 /* Null hour value */
32#define CD_NULL_ID 0 /* Reserved ID */
33#define CD_NULL_MONTH 1 /* Null month value */
34#define CD_NULL_YEAR 0 /* Null year value, component time */
35
36/* Why do we have same enum defined twice? */
37
38typedef enum CdTimeUnit {
39        CdBadTimeUnit = 0,
40 CdMinute = 1,
41 CdHour = 2,
42 CdDay = 3,
43 CdWeek = 4, /* Always = 7 days */
44 CdMonth = 5,
45 CdSeason = 6, /* Always = 3 months */
46 CdYear = 7,
47 CdSecond = 8
48CdTimeUnit;
49
50typedef enum cdUnitTime {
51        cdBadUnit = CdBadTimeUnit,
52 cdMinute = CdMinute,
53 cdHour = CdHour,
54 cdDay = CdDay,
55 cdWeek = CdWeek, /* Always = 7 days */
56 cdMonth = CdMonth,
57 cdSeason = CdSeason, /* Always = 3 months */
58 cdYear = CdYear,
59 cdSecond = CdSecond,
60 cdFraction /* Fractional part of absolute time */
61cdUnitTime;
62
63#define CdChronCal    0x1
64#define CdClimCal     0x0
65#define CdBaseRel    0x00
66#define CdBase1970   0x10
67#define CdHasLeap   0x100
68#define CdNoLeap    0x000
69#define Cd366      0x2000
70#define Cd365      0x1000
71#define Cd360      0x0000
72#define CdJulianType 0x10000
73
74typedef enum CdTimeType {
75 CdChron       = ( CdChronCal | CdBase1970 | CdHasLeap | Cd365), /* 4369 */
76 CdJulianCal   = ( CdChronCal | CdBase1970 | CdHasLeap | Cd365 | CdJulianType),
77 CdChronNoLeap = ( CdChronCal | CdBase1970 | CdNoLeap  | Cd365), /* 4113 */
78 CdChron360    = ( CdChronCal | CdBase1970 | CdNoLeap  | Cd360), /*   17 */
79 CdRel         = ( CdChronCal | CdBaseRel  | CdHasLeap | Cd365), /* 4353 */
80 CdRelNoLeap   = ( CdChronCal | CdBaseRel  | CdNoLeap  | Cd365), /* 4097 */
81 CdClim        = ( CdClimCal  | CdBaseRel  | CdNoLeap  | Cd365), /* 4096 */
82 CdClimLeap    = ( CdClimCal  | CdBaseRel  | CdHasLeap | Cd365),
83 CdClim360     = ( CdClimCal  | CdBaseRel  | CdNoLeap  | Cd365),
84 CdChron366    = ( CdChronCal | CdBase1970 | CdNoLeap  | Cd366)
85}  CdTimeType;
86
87typedef struct {
88 long     year;      /* e.g., 1979 */
89 short month;      /* e.g., CdDec */
90 short day;      /* e.g., 30 */
91 double hour;      /* hour and fractional hour */
92 long baseYear;    /* base year for relative, 1970 for CdChron */
93 CdTimeType timeType;    /* e.g., CdChron */
94CdTime;
95
96#define cdStandardCal   0x11
97#define cdClimCal        0x0
98#define cdHasLeap      0x100
99#define cdHasNoLeap    0x000
100#define cd366Days      0x2000
101#define cd365Days     0x1000
102#define cd360Days     0x0000
103#define cdJulianCal  0x10000
104#define cdMixedCal   0x20000
105
106typedef enum cdCalenType {
107 cdStandard    = ( cdStandardCal | cdHasLeap   | cd365Days),
108 cdJulian      = ( cdStandardCal | cdHasLeap   | cd365Days | cdJulianCal),
109 cdNoLeap      = ( cdStandardCal | cdHasNoLeap | cd365Days),
110 cd360         = ( cdStandardCal | cdHasNoLeap | cd360Days),
111 cd366         = ( cdStandardCal | cdHasNoLeap | cd366Days),
112 cdClim        = ( cdClimCal     | cdHasNoLeap | cd365Days),
113 cdClimLeap    = ( cdClimCal     | cdHasLeap   | cd365Days),
114 cdClim360     = ( cdClimCal     | cdHasNoLeap | cd360Days),
115 cdMixed       = ( cdStandardCal | cdHasLeap   | cd365Days | cdMixedCal)
116}  cdCalenType;
117
118/* Component time */
119typedef struct {
120 long  year;      /* Year */
121 short  month;      /* Numerical month (1..12) */
122 short  day;      /* Day of month (1..31) */
123 double  hour;      /* Hour and fractional hours */
124cdCompTime;
125
126typedef struct {
127 long    count;      /* units count  */
128 CdTimeUnit units;      /* time interval units */
129CdDeltaTime;
130
131typedef struct timeinfo_t {
132    cdCalenType calendar;
133    cdUnitTime unit;
134    char *units;
135    cdCompTime origin;
136timeinfo_t;
137
138
139
140#if defined(DLL_NETCDF) /* Defined when library is a DLL */
141# if defined(DLL_EXPORT) /* define when building the library. */
142#   define MSC_NCTIME_EXTRA __declspec(dllexport)
143# else
144#   define MSC_NCTIME_EXTRA __declspec(dllimport)
145# endif
146
147MSC_NCTIME_EXTRA extern void cdRel2Iso(cdCalenType timetype, char* relunits, int separator, double reltime, char* chartime);
148MSC_NCTIME_EXTRA extern void cdChar2Comp(cdCalenType timetype, char* chartimecdCompTimecomptime);
149MSC_NCTIME_EXTRA extern void Cdh2e(CdTime *htime, double *etime);
150MSC_NCTIME_EXTRA extern void Cde2h(double etimeCdTimeType timeType, long baseYearCdTime *htime);
151MSC_NCTIME_EXTRA extern int cdParseRelunits(cdCalenType timetype, char* relunitscdUnitTimeunitcdCompTimebase_comptime);
152#else
153extern void cdRel2Iso(cdCalenType timetype, char* relunits, int separator, double reltime, char* chartime);
154extern void cdChar2Comp(cdCalenType timetype, char* chartimecdCompTimecomptime);
155extern void Cdh2e(CdTime *htime, double *etime);
156extern void Cde2h(double etimeCdTimeType timeType, long baseYearCdTime *htime);
157extern int cdParseRelunits(cdCalenType timetype, char* relunitscdUnitTimeunitcdCompTimebase_comptime);
158#endif /* DLL Considerations. */
159
160
161


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed