Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
mpim-sw
libcdi
Commits
36560a71
Commit
36560a71
authored
Jul 24, 2014
by
Uwe Schulzweida
Browse files
gribapiEncode: update additional keys defined with vlistDefVarXXXKey() [Feature #4720]
parent
ad20cb3e
Changes
6
Hide whitespace changes
Inline
Side-by-side
ChangeLog
View file @
36560a71
...
...
@@ -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
...
...
src/stream_gribapi.c
View file @
36560a71
...
...
@@ -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
);
}
}
}
...
...
src/varscan.c
View file @
36560a71
...
...
@@ -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
]);
}
...
...
src/vlist.c
View file @
36560a71
...
...
@@ -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
...
...
src/vlist.h
View file @
36560a71
...
...
@@ -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
}
...
...
src/vlist_var.c
View file @
36560a71
...
...
@@ -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
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment