source: trunk/WRF.COMMON/WRFV2/external/io_grib1/WGRIB/cnames.c @ 3567

Last change on this file since 3567 was 11, checked in by aslmd, 14 years ago

spiga@svn-planeto:ajoute le modele meso-echelle martien

File size: 4.7 KB
Line 
1#include <stdio.h>
2#include <string.h>
3#include <stdlib.h>
4#include "cnames.h"
5#include "pds4.h"
6#include "grib.h"
7
8/* cnames.c                             Wesley Ebisuzaki
9 *
10 * returns strings with either variable name or comment field
11 * v1.4 4/98
12 * reanalysis can use process 180 and subcenter 0
13 *
14 * Add DWD tables 2, 201, 202, 203      Helmut P. Frank, DWD, FE13
15 *                                      Thu Aug 23 09:28:34 GMT 2001
16 */
17
18
19extern  struct ParmTable parm_table_ncep_opn[256];
20extern  struct ParmTable parm_table_ncep_reanal[256];
21extern  struct ParmTable parm_table_nceptab_129[256];
22extern  struct ParmTable parm_table_omb[256];
23extern  struct ParmTable parm_table_nceptab_130[256];
24extern  struct ParmTable parm_table_nceptab_131[256];
25
26extern  struct ParmTable parm_table_ecmwf_128[256];
27extern  struct ParmTable parm_table_ecmwf_129[256];
28extern  struct ParmTable parm_table_ecmwf_130[256];
29extern  struct ParmTable parm_table_ecmwf_131[256];
30extern  struct ParmTable parm_table_ecmwf_140[256];
31extern  struct ParmTable parm_table_ecmwf_150[256];
32extern  struct ParmTable parm_table_ecmwf_151[256];
33extern  struct ParmTable parm_table_ecmwf_160[256];
34extern  struct ParmTable parm_table_ecmwf_170[256];
35extern  struct ParmTable parm_table_ecmwf_180[256];
36extern  struct ParmTable parm_table_user[256];
37extern  struct ParmTable parm_table_dwd_002[256];
38extern  struct ParmTable parm_table_dwd_201[256];
39extern  struct ParmTable parm_table_dwd_202[256];
40extern  struct ParmTable parm_table_dwd_203[256];
41extern  struct ParmTable parm_table_cptec_254[256];
42
43extern enum Def_NCEP_Table def_ncep_table;
44
45/*
46 * returns pointer to the parameter table
47 */
48
49
50
51static struct ParmTable *Parm_Table(unsigned char *pds) {
52
53    int i, center, subcenter, ptable, process;
54    static int missing_count = 0, reanal_opn_count = 0;
55
56    center = PDS_Center(pds);
57    subcenter = PDS_Subcenter(pds);
58    ptable = PDS_Vsn(pds);
59
60#ifdef P_TABLE_FIRST
61    i = setup_user_table(center, subcenter, ptable);
62    if (i == 1) return &parm_table_user[0];
63#endif
64    /* figure out if NCEP opn or reanalysis */
65    if (center == NMC && ptable <= 3) {
66        if (subcenter == 1) return &parm_table_ncep_reanal[0];
67        process = PDS_Model(pds);
68        if (subcenter != 0 || (process != 80 && process != 180) || 
69                (ptable != 1 && ptable != 2)) 
70            return &parm_table_ncep_opn[0];
71
72        /* at this point could be either the opn or reanalysis table */
73        if (def_ncep_table == opn_nowarn) return &parm_table_ncep_opn[0];
74        if (def_ncep_table == rean_nowarn) return &parm_table_ncep_reanal[0];
75        if (reanal_opn_count++ == 0) {
76            fprintf(stderr, "Using NCEP %s table, see -ncep_opn, -ncep_rean options\n",
77               (def_ncep_table == opn) ?  "opn" : "reanalysis");
78        }
79        return (def_ncep_table == opn) ?  &parm_table_ncep_opn[0] 
80                : &parm_table_ncep_reanal[0];
81    }
82
83    if (center == NMC) {
84        if (ptable == 128) return &parm_table_omb[0];
85        if (ptable == 129) return &parm_table_nceptab_129[0];
86        if (ptable == 130) return &parm_table_nceptab_130[0];
87        if (ptable == 131) return &parm_table_nceptab_131[0];
88        if (ptable == 132) return &parm_table_ncep_reanal[0];
89    }
90    if (center == ECMWF) {
91        if (ptable == 128) return &parm_table_ecmwf_128[0];
92        if (ptable == 129) return &parm_table_ecmwf_129[0];
93        if (ptable == 130) return &parm_table_ecmwf_130[0];
94        if (ptable == 131) return &parm_table_ecmwf_131[0];
95        if (ptable == 140) return &parm_table_ecmwf_140[0];
96        if (ptable == 150) return &parm_table_ecmwf_150[0];
97        if (ptable == 151) return &parm_table_ecmwf_151[0];
98        if (ptable == 160) return &parm_table_ecmwf_160[0];
99        if (ptable == 170) return &parm_table_ecmwf_170[0];
100        if (ptable == 180) return &parm_table_ecmwf_180[0];
101    }
102    if (center == DWD) {
103        if (ptable ==   2) return &parm_table_dwd_002[0];
104        if (ptable == 201) return &parm_table_dwd_201[0];
105        if (ptable == 202) return &parm_table_dwd_202[0];
106        if (ptable == 203) return &parm_table_dwd_203[0];
107    }
108    if (center == CPTEC) {
109        if (ptable == 254) return &parm_table_cptec_254[0];
110    }
111
112#ifndef P_TABLE_FIRST
113    i = setup_user_table(center, subcenter, ptable);
114    if (i == 1) return &parm_table_user[0];
115#endif
116
117    if ((ptable > 3 || (PDS_PARAM(pds)) > 127) && missing_count++ == 0) {
118        fprintf(stderr,
119            "\nUndefined parameter table (center %d-%d table %d), using NCEP-opn\n",
120            center, subcenter, ptable);
121    }
122    return &parm_table_ncep_opn[0];
123}
124
125/*
126 * return name field of PDS_PARAM(pds)
127 */
128
129char *k5toa(unsigned char *pds) {
130
131    return (Parm_Table(pds) + PDS_PARAM(pds))->name;
132}
133
134/*
135 * return comment field of the PDS_PARAM(pds)
136 */
137
138char *k5_comments(unsigned char *pds) {
139
140    return (Parm_Table(pds) + PDS_PARAM(pds))->comment;
141}
Note: See TracBrowser for help on using the repository browser.