grid.h 4.95 KB
Newer Older
Uwe Schulzweida's avatar
Uwe Schulzweida committed
1
2
3
#ifndef _GRID_H
#define _GRID_H

4
5
#include "cdi.h"

Uwe Schulzweida's avatar
Uwe Schulzweida committed
6
typedef unsigned char mask_t;
Uwe Schulzweida's avatar
Uwe Schulzweida committed
7

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
typedef struct grid_t grid_t;

struct gridVirtTable
{
  void (*destroy)(grid_t *gridptr);
  void (*duplicateData)(grid_t *gridptrOrig, grid_t *gridptrDup);
  void (*defXVals)(grid_t *gridptr, const double *xvals);
  void (*defYVals)(grid_t *gridptr, const double *yvals);
  void (*defMask)(grid_t *gridptr, const int *mask);
  void (*defMaskGME)(grid_t *gridptr, const int *mask);
  void (*defXBounds)(grid_t *gridptr, const double *xbounds);
  void (*defYBounds)(grid_t *gridptr, const double *ybounds);
  void (*defArea)(grid_t *gridptr, const double *area);
  double (*inqXVal)(grid_t *gridptr, int index);
  double (*inqYVal)(grid_t *gridptr, int index);
  int (*inqXVals)(grid_t *gridptr, double *xvals);
  int (*inqYVals)(grid_t *gridptr, double *yvals);
  const double *(*inqXValsPtr)(grid_t *gridptr);
  const double *(*inqYValsPtr)(grid_t *gridptr);
27
28
29
30
31
  /* return if for both grids, all xval and all yval are equal */
  int (*compareXYFull)(grid_t *gridRef, grid_t *gridTest);
  /* return if for both grids, x[0], y[0], x[size-1] and y[size-1] are
   * respectively equal */
  int (*compareXYAO)(grid_t *gridRef, grid_t *gridTest);
32
  void (*inqArea)(grid_t *gridptr, double *area);
33
  const double *(*inqAreaPtr)(grid_t *gridptr);
Thomas Jahns's avatar
Thomas Jahns committed
34
  int (*hasArea)(grid_t *gridptr);
35
36
37
38
39
40
41
42
43
  int (*inqMask)(grid_t *gridptr, int *mask);
  int (*inqMaskGME)(grid_t *gridptr, int *mask_gme);
  int (*inqXBounds)(grid_t *gridptr, double *xbounds);
  int (*inqYBounds)(grid_t *gridptr, double *ybounds);
  const double *(*inqXBoundsPtr)(grid_t *gridptr);
  const double *(*inqYBoundsPtr)(grid_t *gridptr);
};

struct grid_t {
Uwe Schulzweida's avatar
Uwe Schulzweida committed
44
45
46
  int     self;
  int     type;                   /* grid type                      */
  int     prec;                   /* grid precision                 */
47
  int     proj;                   /* grid projection                */
Uwe Schulzweida's avatar
Uwe Schulzweida committed
48
49
  mask_t *mask;
  mask_t *mask_gme;
Uwe Schulzweida's avatar
Uwe Schulzweida committed
50
51
52
53
54
55
56
57
  double *xvals;
  double *yvals;
  double *area;
  double *xbounds;
  double *ybounds;
  double  xfirst, yfirst;
  double  xlast, ylast;
  double  xinc, yinc;
58
  double  lcc_originLon;          /* Lambert Conformal Conic        */
Uwe Schulzweida's avatar
Uwe Schulzweida committed
59
60
61
62
63
64
  double  lcc_originLat;
  double  lcc_lonParY;
  double  lcc_lat1;
  double  lcc_lat2;
  double  lcc_xinc;
  double  lcc_yinc;
65
66
  int     lcc_projflag;
  int     lcc_scanflag;
67
68
69
  short   lcc_defined;
  short   lcc2_defined;
  int     laea_defined;
70
71
72
73
74
  double  lcc2_lon_0;             /* Lambert Conformal Conic 2      */
  double  lcc2_lat_0;
  double  lcc2_lat_1;
  double  lcc2_lat_2;
  double  lcc2_a;
75
76
77
  double  laea_lon_0;             /* Lambert Azimuthal Equal Area   */
  double  laea_lat_0;
  double  laea_a;
Uwe Schulzweida's avatar
Uwe Schulzweida committed
78
  double  xpole, ypole, angle;    /* rotated north pole             */
79
80
81
82
  short   isCyclic;               /* TRUE for global cyclic grids   */
  short   isRotated;              /* TRUE for rotated grids         */
  short   xdef;                   /* 0: undefined 1:xvals 2:x0+xinc */
  short   ydef;                   /* 0: undefined 1:yvals 2:y0+yinc */
Uwe Schulzweida's avatar
Uwe Schulzweida committed
83
  int     nd, ni, ni2, ni3;       /* parameter for GRID_GME         */
84
  int     number, position;       /* parameter for GRID_REFERENCE   */
Uwe Schulzweida's avatar
Uwe Schulzweida committed
85
86
  int     trunc;                  /* parameter for GRID_SPECTEAL    */
  int     nvertex;
87
88
  char   *reference;
  unsigned char uuid[CDI_UUID_SIZE]; /* uuid for grid reference        */
Uwe Schulzweida's avatar
Uwe Schulzweida committed
89
90
91
  int    *rowlon;
  int     nrowlon;
  int     size;
92
93
94
  int     xsize;                  /* number of values along X */
  int     ysize;                  /* number of values along Y */
  int     np;                     /* number of parallels between a pole and the equator */
95
  int     lcomplex;
96
  int     hasdims;
97
98
  const char *xstdname;
  const char *ystdname;
Uwe Schulzweida's avatar
Uwe Schulzweida committed
99
100
101
102
103
104
  char    xname[CDI_MAX_NAME];
  char    yname[CDI_MAX_NAME];
  char    xlongname[CDI_MAX_NAME];
  char    ylongname[CDI_MAX_NAME];
  char    xunits[CDI_MAX_NAME];
  char    yunits[CDI_MAX_NAME];
Uwe Schulzweida's avatar
Uwe Schulzweida committed
105
  char   *name;
106
107
108
  const struct gridVirtTable *vtable;
  void *extraData;
};
Uwe Schulzweida's avatar
Uwe Schulzweida committed
109
110


Uwe Schulzweida's avatar
Uwe Schulzweida committed
111
void grid_init(grid_t *gridptr);
112
113
void
cdiGridTypeInit(grid_t *gridptr, int gridtype, int size);
Uwe Schulzweida's avatar
Uwe Schulzweida committed
114
void grid_free(grid_t *gridptr);
115
grid_t *gridID2Ptr(int gridID);
116
extern const struct gridVirtTable cdiGridVtable;
Uwe Schulzweida's avatar
Uwe Schulzweida committed
117

Thomas Jahns's avatar
Thomas Jahns committed
118
unsigned cdiGridCount(void);
119

Uwe Schulzweida's avatar
Uwe Schulzweida committed
120
121
122
const double *gridInqXvalsPtr(int gridID);
const double *gridInqYvalsPtr(int gridID);

123
124
const double *gridInqXboundsPtr(int gridID);
const double *gridInqYboundsPtr(int gridID);
Uwe Schulzweida's avatar
Uwe Schulzweida committed
125
126
const double *gridInqAreaPtr(int gridID);

127
128
int gridCompare(int gridID, const grid_t *grid);
int gridGenerate(const grid_t *grid);
Uwe Schulzweida's avatar
Uwe Schulzweida committed
129

Thomas Jahns's avatar
Thomas Jahns committed
130
void cdiGridGetIndexList(unsigned, int * );
Uwe Schulzweida's avatar
Uwe Schulzweida committed
131

132
133
void
gridUnpack(char * unpackBuffer, int unpackBufferSize,
134
           int * unpackBufferPos, int originNamespace, void *context,
135
136
           int force_id);

137
138
139
140
141
142
143
struct addIffNewRes
{
  int Id;
  int isNew;
};

struct addIffNewRes cdiVlistAddGridIfNew(int vlistID, grid_t *grid, int mode);
144

Uwe Schulzweida's avatar
Uwe Schulzweida committed
145
#endif
146
147
148
149
150
151
152
153
154
/*
 * Local Variables:
 * c-file-style: "Java"
 * c-basic-offset: 2
 * indent-tabs-mode: nil
 * show-trailing-whitespace: t
 * require-trailing-newline: t
 * End:
 */