Commit 36560a71 authored by Uwe Schulzweida's avatar Uwe Schulzweida
Browse files

gribapiEncode: update additional keys defined with vlistDefVarXXXKey() [Feature #4720]

parent ad20cb3e
......@@ -3,9 +3,13 @@
* Version 1.7.0 released
* using CGRIBEX library version 1.7.0
2014-07-24 Uwe Schulzweida
* gribapiEncode: update additional keys defined with vlistDefVarXXXKey() [Feature #4720]
2014-07-22 Uwe Schulzweida
* added vlistDefVarProductDefinitionTemplate() to define GRIB2 Product Definition Template Number
* added vlistDefVarProductDefinitionTemplate() to define GRIB2 Product Definition Template Number [Feature #4694]
2014-07-21 Uwe Schulzweida
......
......@@ -3138,29 +3138,37 @@ size_t gribapiEncode(int varID, int levelID, int vlistID, int gridID, int zaxisI
vlist_t *vlistptr;
vlistptr = vlist_to_pointer(vlistID);
if (!gc->init) {
int i;
for (i=0; i<vlistptr->vars[varID].opt_grib_dbl_nentries; i++)
//if (!gc->init)
{
for (int i=0; i<vlistptr->vars[varID].opt_grib_dbl_nentries; i++)
{
int ret = my_grib_set_double(gh, vlistptr->vars[varID].opt_grib_dbl_keyword[i],
vlistptr->vars[varID].opt_grib_dbl_val[i]);
if (ret != 0) {
fprintf(stderr, "key \"%s\" : value = %g\n",
vlistptr->vars[varID].opt_grib_dbl_keyword[i],
vlistptr->vars[varID].opt_grib_dbl_val[i]);
}
GRIB_CHECK(ret, 0);
if ( vlistptr->vars[varID].opt_grib_dbl_update[i] )
{
vlistptr->vars[varID].opt_grib_dbl_update[i] = FALSE;
int ret = my_grib_set_double(gh, vlistptr->vars[varID].opt_grib_dbl_keyword[i],
vlistptr->vars[varID].opt_grib_dbl_val[i]);
if (ret != 0) {
fprintf(stderr, "key \"%s\" : value = %g\n",
vlistptr->vars[varID].opt_grib_dbl_keyword[i],
vlistptr->vars[varID].opt_grib_dbl_val[i]);
}
GRIB_CHECK(ret, 0);
}
}
for (i=0; i<vlistptr->vars[varID].opt_grib_int_nentries; i++)
for (int i=0; i<vlistptr->vars[varID].opt_grib_int_nentries; i++)
{
int ret = my_grib_set_long(gh, vlistptr->vars[varID].opt_grib_int_keyword[i],
vlistptr->vars[varID].opt_grib_int_val[i]);
if (ret != 0) {
fprintf(stderr, "key \"%s\" : value = %d\n",
vlistptr->vars[varID].opt_grib_int_keyword[i],
vlistptr->vars[varID].opt_grib_int_val[i]);
}
GRIB_CHECK(ret, 0);
if ( vlistptr->vars[varID].opt_grib_int_update[i] )
{
vlistptr->vars[varID].opt_grib_int_update[i] = FALSE;
int ret = my_grib_set_long(gh, vlistptr->vars[varID].opt_grib_int_keyword[i],
vlistptr->vars[varID].opt_grib_int_val[i]);
if (ret != 0) {
fprintf(stderr, "key \"%s\" : value = %d\n",
vlistptr->vars[varID].opt_grib_int_keyword[i],
vlistptr->vars[varID].opt_grib_int_val[i]);
}
GRIB_CHECK(ret, 0);
}
}
}
......
......@@ -632,6 +632,7 @@ void cdi_generate_vars(stream_t *streamptr)
int idx = vlistptr->vars[varID].opt_grib_int_nentries;
vlistptr->vars[varID].opt_grib_int_nentries++;
if ( idx >= MAX_OPT_GRIB_ENTRIES ) Error("Too many optional keyword/integer value pairs!");
vlistptr->vars[varID].opt_grib_int_update[idx] = TRUE;
vlistptr->vars[varID].opt_grib_int_val[idx] = vartable[varid].opt_grib_int_val[idx];
vlistptr->vars[varID].opt_grib_int_keyword[idx] = strdupx(vartable[varid].opt_grib_int_keyword[idx]);
}
......@@ -640,6 +641,7 @@ void cdi_generate_vars(stream_t *streamptr)
int idx = vlistptr->vars[varID].opt_grib_dbl_nentries;
vlistptr->vars[varID].opt_grib_dbl_nentries++;
if ( idx >= MAX_OPT_GRIB_ENTRIES ) Error("Too many optional keyword/double value pairs!");
vlistptr->vars[varID].opt_grib_dbl_update[idx] = TRUE;
vlistptr->vars[varID].opt_grib_dbl_val[idx] = vartable[varid].opt_grib_dbl_val[idx];
vlistptr->vars[varID].opt_grib_dbl_keyword[idx] = strdupx(vartable[varid].opt_grib_dbl_keyword[idx]);
}
......
......@@ -340,6 +340,7 @@ void vlistCopy(int vlistID2, int vlistID1)
if ( vlistptr1->vars[varID].opt_grib_int_keyword[i] ) {
vlistptr2->vars[varID].opt_grib_int_keyword[i] = strdupx(vlistptr1->vars[varID].opt_grib_int_keyword[i]);
vlistptr2->vars[varID].opt_grib_int_val[i] = vlistptr1->vars[varID].opt_grib_int_val[i];
vlistptr2->vars[varID].opt_grib_int_update[i] = TRUE;
}
}
vlistptr2->vars[varID].opt_grib_dbl_nentries = vlistptr1->vars[varID].opt_grib_dbl_nentries;
......@@ -347,6 +348,7 @@ void vlistCopy(int vlistID2, int vlistID1)
if ( vlistptr1->vars[varID].opt_grib_dbl_keyword[i] ) {
vlistptr2->vars[varID].opt_grib_dbl_keyword[i] = strdupx(vlistptr1->vars[varID].opt_grib_dbl_keyword[i]);
vlistptr2->vars[varID].opt_grib_dbl_val[i] = vlistptr1->vars[varID].opt_grib_dbl_val[i];
vlistptr2->vars[varID].opt_grib_dbl_update[i] = TRUE;
}
}
#endif
......@@ -595,6 +597,7 @@ void vlistCopyFlag(int vlistID2, int vlistID1)
if ( vlistptr1->vars[varID].opt_grib_int_keyword[i] ) {
vlistptr2->vars[varID2].opt_grib_int_keyword[i] = strdupx(vlistptr1->vars[varID].opt_grib_int_keyword[i]);
vlistptr2->vars[varID2].opt_grib_int_val[i] = vlistptr1->vars[varID].opt_grib_int_val[i];
vlistptr2->vars[varID2].opt_grib_int_update[i] = TRUE;
}
}
vlistptr2->vars[varID2].opt_grib_dbl_nentries = vlistptr1->vars[varID].opt_grib_dbl_nentries;
......@@ -602,6 +605,7 @@ void vlistCopyFlag(int vlistID2, int vlistID1)
if ( vlistptr1->vars[varID].opt_grib_dbl_keyword[i] ) {
vlistptr2->vars[varID2].opt_grib_dbl_keyword[i] = strdupx(vlistptr1->vars[varID].opt_grib_dbl_keyword[i]);
vlistptr2->vars[varID2].opt_grib_dbl_val[i] = vlistptr1->vars[varID].opt_grib_dbl_val[i];
vlistptr2->vars[varID2].opt_grib_dbl_update[i] = TRUE;
}
}
#endif
......@@ -821,6 +825,7 @@ void vlistCat(int vlistID2, int vlistID1)
if ( vlistptr1->vars[varID].opt_grib_int_keyword[i] ) {
vlistptr2->vars[varID2].opt_grib_int_keyword[i] = strdupx(vlistptr1->vars[varID].opt_grib_int_keyword[i]);
vlistptr2->vars[varID2].opt_grib_int_val[i] = vlistptr1->vars[varID].opt_grib_int_val[i];
vlistptr2->vars[varID2].opt_grib_int_update[i] = TRUE;
}
}
vlistptr2->vars[varID2].opt_grib_dbl_nentries = vlistptr1->vars[varID].opt_grib_dbl_nentries;
......@@ -828,6 +833,7 @@ void vlistCat(int vlistID2, int vlistID1)
if ( vlistptr1->vars[varID].opt_grib_dbl_keyword[i] ) {
vlistptr2->vars[varID2].opt_grib_dbl_keyword[i] = strdupx(vlistptr1->vars[varID].opt_grib_dbl_keyword[i]);
vlistptr2->vars[varID2].opt_grib_dbl_val[i] = vlistptr1->vars[varID].opt_grib_dbl_val[i];
vlistptr2->vars[varID2].opt_grib_dbl_update[i] = TRUE;
}
}
#endif
......
......@@ -114,10 +114,12 @@ typedef struct
/* (Optional) list of keyword/double value pairs */
int opt_grib_dbl_nentries;
char* opt_grib_dbl_keyword[MAX_OPT_GRIB_ENTRIES];
int opt_grib_dbl_update[MAX_OPT_GRIB_ENTRIES];
double opt_grib_dbl_val[MAX_OPT_GRIB_ENTRIES];
/* (Optional) list of keyword/integer value pairs */
int opt_grib_int_nentries;
char* opt_grib_int_keyword[MAX_OPT_GRIB_ENTRIES];
int opt_grib_int_update[MAX_OPT_GRIB_ENTRIES];
int opt_grib_int_val[MAX_OPT_GRIB_ENTRIES];
#endif
}
......
......@@ -77,8 +77,10 @@ void vlistvarInitEntry(int vlistID, int varID)
vlistptr->vars[varID].opt_grib_int_nentries = 0;
int i;
for (i=0; i<MAX_OPT_GRIB_ENTRIES; i++) {
vlistptr->vars[varID].opt_grib_dbl_val[i] = 0.0;
vlistptr->vars[varID].opt_grib_int_val[i] = 0;
vlistptr->vars[varID].opt_grib_dbl_val[i] = 0.0;
vlistptr->vars[varID].opt_grib_int_update[i] = FALSE;
vlistptr->vars[varID].opt_grib_dbl_update[i] = FALSE;
vlistptr->vars[varID].opt_grib_int_keyword[i] = NULL;
vlistptr->vars[varID].opt_grib_dbl_keyword[i] = NULL;
} // for
......@@ -1739,15 +1741,28 @@ void vlistDefVarIntKey(int vlistID, int varID, const char *name, int value)
{
#if defined (HAVE_LIBGRIB_API)
vlist_t *vlistptr = vlist_to_pointer(vlistID);
int idx;
int idx = vlistptr->vars[varID].opt_grib_int_nentries;
vlistptr->vars[varID].opt_grib_int_nentries++;
if ( idx >= MAX_OPT_GRIB_ENTRIES ) Error("Too many optional keyword/integer value pairs!");
vlistptr->vars[varID].opt_grib_int_val[idx] = value;
if ( name )
vlistptr->vars[varID].opt_grib_int_keyword[idx] = strdupx(name);
for ( idx=0; idx<vlistptr->vars[varID].opt_grib_int_nentries; idx++)
if ( strcmp(name, vlistptr->vars[varID].opt_grib_int_keyword[idx]) == 0 ) break;
if ( idx < vlistptr->vars[varID].opt_grib_int_nentries )
{
vlistptr->vars[varID].opt_grib_int_val[idx] = value;
vlistptr->vars[varID].opt_grib_int_update[idx] = TRUE;
}
else
Error("Internal error!");
{
idx = vlistptr->vars[varID].opt_grib_int_nentries;
vlistptr->vars[varID].opt_grib_int_nentries++;
if ( idx >= MAX_OPT_GRIB_ENTRIES ) Error("Too many optional keyword/integer value pairs!");
vlistptr->vars[varID].opt_grib_int_val[idx] = value;
vlistptr->vars[varID].opt_grib_int_update[idx] = TRUE;
if ( name )
vlistptr->vars[varID].opt_grib_int_keyword[idx] = strdupx(name);
else
Error("Internal error, name undefined!");
}
#endif
}
......@@ -1756,15 +1771,28 @@ void vlistDefVarDblKey(int vlistID, int varID, const char *name, double value)
{
#if defined (HAVE_LIBGRIB_API)
vlist_t *vlistptr = vlist_to_pointer(vlistID);
int idx;
int idx = vlistptr->vars[varID].opt_grib_dbl_nentries;
vlistptr->vars[varID].opt_grib_dbl_nentries++;
if ( idx >= MAX_OPT_GRIB_ENTRIES ) Error("Too many optional keyword/double value pairs!");
vlistptr->vars[varID].opt_grib_dbl_val[idx] = value;
if ( name )
vlistptr->vars[varID].opt_grib_dbl_keyword[idx] = strdupx(name);
for ( idx=0; idx<vlistptr->vars[varID].opt_grib_dbl_nentries; idx++)
if ( strcmp(name, vlistptr->vars[varID].opt_grib_dbl_keyword[idx]) == 0 ) break;
if ( idx < vlistptr->vars[varID].opt_grib_dbl_nentries )
{
vlistptr->vars[varID].opt_grib_dbl_val[idx] = value;
vlistptr->vars[varID].opt_grib_dbl_update[idx] = TRUE;
}
else
Error("Internal error!");
{
idx = vlistptr->vars[varID].opt_grib_dbl_nentries;
vlistptr->vars[varID].opt_grib_dbl_nentries++;
if ( idx >= MAX_OPT_GRIB_ENTRIES ) Error("Too many optional keyword/double value pairs!");
vlistptr->vars[varID].opt_grib_dbl_val[idx] = value;
vlistptr->vars[varID].opt_grib_dbl_update[idx] = TRUE;
if ( name )
vlistptr->vars[varID].opt_grib_dbl_keyword[idx] = strdupx(name);
else
Error("Internal error, name undefined!");
}
#endif
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment