/*--------------------------------------------------------------------
 *    The GMT-system:        @(#)gmt_grd.h        3.18  01/13/00
 *
 *        Copyright (c) 1991-2000 by P. Wessel and W. H. F. Smith
 *        See COPYING file for copying and redistribution conditions.
 *
 *        This program is free software; you can redistribute it and/or modify
 *        it under the terms of the GNU General Public License as published by
 *        the Free Software Foundation; version 2 of the License.
 *
 *        This program is distributed in the hope that it will be useful,
 *        but WITHOUT ANY WARRANTY; without even the implied warranty of
 *        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *        GNU General Public License for more details.
 *
 *        Contact info: www.soest.hawaii.edu/gmt
 *--------------------------------------------------------------------*/
/*
 * grd.h contains the definition for a GMT-SYSTEM Version >= 2 grd file
 *
 * grd is stored in rows going from west (xmin) to east (xmax)
 * first row in file has yvalue = north (ymax).
 * This is SCANLINE orientation.
 *
 * Author:      Paul Wessel
 * Date:        26-MAY-1990
 * Revised:     21-OCT-1998
 */

/* Nodes that are unconstrained are assumed to be set to NaN */

#define GRD_COMMAND_LEN 320
#define GRD_REMARK_LEN  160
#define GRD_TITLE_LEN   80
#define GRD_UNIT_LEN    80

struct GRD_HEADER {
    int nx;                        /* Number of columns */
    int ny;                        /* Number of rows */
    int node_offset;               /* 0 for node grids, 1 for pixel grids */
    double x_min;                  /* Minimum x coordinate */
    double x_max;                  /* Maximum x coordinate */
    double y_min;                  /* Minimum y coordinate */
    double y_max;                  /* Maximum y coordinate */
    double z_min;                  /* Minimum z value */
    double z_max;                  /* Maximum z value */
    double x_inc;                  /* x increment */
    double y_inc;                  /* y increment */
    double z_scale_factor;         /* grd values must be multiplied by this */
    double z_add_offset;           /* After scaling, add this */
    char x_units[GRD_UNIT_LEN];    /* units in x-direction */
    char y_units[GRD_UNIT_LEN];    /* units in y-direction */
    char z_units[GRD_UNIT_LEN];    /* grid value units */
    char title[GRD_TITLE_LEN];     /* name of data set */
    char command[GRD_COMMAND_LEN]; /* name of generating command */
    char remark[GRD_REMARK_LEN];   /* comments re this data set */
};

/*-----------------------------------------------------------------------------------------
 *        Notes on node_offset:

        Assume x_min = y_min = 0 and x_max = y_max = 10 and x_inc = y_inc = 1.
        For a normal node grid we have:
                (1) nx = (x_max - x_min) / x_inc + 1 = 11
                    ny = (y_max - y_min) / y_inc + 1 = 1
                (2) node # 0 is at (x,y) = (x_min, y_max) = (0,10) and
represents the surface value in a box with dimensions (1,1) centered on the
node. For a pixel grid we have: (1) nx = (x_max - x_min) / x_inc = 10 ny =
(y_max - y_min) / y_inc = 10 (2) node # 0 is at (x,y) = (x_min + 0.5*x_inc,
y_max - 0.5*y_inc) = (0.5, 9.5) and represents the surface value in a box with
dimensions (1,1) centered on the node.
-------------------------------------------------------------------------------------------*/
