File: tst_degrib2_fast.c

package info (click to toggle)
g2clib 2.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,524 kB
  • sloc: ansic: 28,287; python: 76; sh: 46; makefile: 26
file content (139 lines) | stat: -rw-r--r-- 4,333 bytes parent folder | download | duplicates (2)
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
/* This is a test for the NCEPLIBS-g2c project.
 *
 * This test is for the g2c_degrib2() function, which prints a summary
 * of the GRIB2 file.
 *
 * Ed Hartnett 9/17/22
 */
#include "g2ctest.h"
#include "grib2_int.h"
#include <libgen.h>

#define FILE_NAME "tst_degrib2.txt"
#define WAVE_FILE "data/gdaswave.t00z.wcoast.0p16.f000.grib2"
#define REF_FILE "data/ref_gdaswave.t00z.wcoast.0p16.f000.grib2.degrib2"
#define DEGRIB2_FILE "gdaswave.t00z.wcoast.0p16.f000.degrib2"
#define REF_INDEX_FILE "data/ref_gdaswave.t00z.wcoast.0p16.f000.grb2index"
#define TEST_INDEX_FILE "tst_gdaswave.t00z.wcoast.0p16.f000.grb2index"

/* The first message of the file has the following degrib2 output in the g2 project:

 GRIB MESSAGE  1  starts at 1

  SECTION 0:  0 2 15254
  SECTION 1:  7 0 2 1 1 2021 11 30 0 0 0 0 1
  Contains  0  Local Sections  and  1  data fields.

  FIELD  1
  SECTION 0:  0 2
  SECTION 1:  7 0 2 1 1 2021 11 30 0 0 0 0 1
  SECTION 3:  0 36391 0 0 0
  GRID TEMPLATE 3. 0 :  6 0 0 0 0 0 0 241 151 0 0 50000000 210000000 48 25000000 250000000 166667 166667 0
  NO Optional List Defining Number of Data Points.
  PRODUCT TEMPLATE 4. 0: ( PARAMETER = WIND     0 2 1 )  2 1 2 0 11 0 0 1 0 1 0 1 255 0 0
  FIELD: WIND     Surface valid  0 hour after 2021113000:00:00
  NO Optional Vertical Coordinate List.
  Num. of Data Points =  11041    with BIT-MAP  0
  DRS TEMPLATE 5. 40 :  1092616192 0 2 11 0 0 255
  Data Values:
  Num. of Data Points =  11041   Num. of Data Undefined = 0
( PARM= WIND ) :  MIN=               0.09999999 AVE=               5.64625025 MAX=              16.43000031
*/

int
main()
{
    printf("Testing g2c degrib2 function.\n");
#ifdef JPEG
    printf("Testing g2c_degrib2() on file %s...", WAVE_FILE);
    {
        int g2cid;
        int ret;

        if ((ret = g2c_open(WAVE_FILE, 0, &g2cid)))
            return ret;
        if ((ret = g2c_degrib2(g2cid, FILE_NAME)))
            return ret;
        if ((ret = g2c_close(g2cid)))
            return ret;

        if ((ret = compare_degrib2_files2(FILE_NAME, REF_FILE)))
            return ret;
    }
    printf("ok!\n");
    printf("Testing g2c_open_index() to make a degrib2 file...");
    {
        int g2cid;
        int num_msg;
        int ret;

        /* g2c_set_log_level(4); */
        /* Open the data file using the index file. */
        if ((ret = g2c_open_index(WAVE_FILE, REF_INDEX_FILE, 0, &g2cid)))
            return ret;

        /* Check some stuff. */
        if ((ret = g2c_inq(g2cid, &num_msg)))
            return ret;
        if (num_msg != 19)
            return G2C_ERROR;

        /* Output a degrib2 file. */
        if ((ret = g2c_degrib2(g2cid, DEGRIB2_FILE)))
            return ret;

        /* Close the data file. */
        if ((ret = g2c_close(g2cid)))
            return ret;

        /* Compare the degrib2 output to our reference file. */
        if ((ret = compare_degrib2_files2(DEGRIB2_FILE, REF_FILE)))
            return ret;
    }
    printf("ok!\n");
    printf("Testing g2c_write_index() make an index and then to make a degrib2 file from it...");
    {
        int g2cid;
        int num_msg;
        int ret;

        /* g2c_set_log_level(10); */
        /* Open the data file using the index file. */
        if ((ret = g2c_open(WAVE_FILE, 0, &g2cid)))
            return ret;

        /* Check some stuff. */
        if ((ret = g2c_inq(g2cid, &num_msg)))
            return ret;
        if (num_msg != 19)
            return G2C_ERROR;

        /* Write an index file. */
        if ((ret = g2c_write_index(g2cid, G2C_CLOBBER, TEST_INDEX_FILE)))
            return ret;

        /* Close the data file. */
        if ((ret = g2c_close(g2cid)))
            return ret;

        /* Reopen the data file, using the index we just generated. */
        if ((ret = g2c_open_index(WAVE_FILE, TEST_INDEX_FILE, 0, &g2cid)))
            return ret;

        /* Output a degrib2 file. */
        if ((ret = g2c_degrib2(g2cid, DEGRIB2_FILE)))
            return ret;

        /* Close the data file. */
        if ((ret = g2c_close(g2cid)))
            return ret;

        /* Compare the degrib2 output to our reference file. */
        if ((ret = compare_degrib2_files2(DEGRIB2_FILE, REF_FILE)))
            return ret;
    }
    printf("ok!\n");
#endif /* JPEG */
    printf("SUCCESS!\n");
    return 0;
}