ecCodes 的所有函数都以 codes_
开头,例如
codes_handle_new_from_file(0, in, PRODUCT_GRIB, &err);
一些函数可以用于 GRIB 和 BUFR 两种数据,例如
// GRIB
codes_get_long(h, "Ni", &numberOfPointsAlongAParallel)
// BUFR
codes_get_long(h, "blockNumber", &longVal)
另一些函数则有所不同,例如
grib_handle * codes_grib_handle_new_from_file(grib_context *c, FILE *f, int *error);
grib_handle * codes_bufr_handle_new_from_file(grib_context *c, FILE *f, int *error);
grib_handle * codes_handle_new_from_file(grib_context *c, FILE *f, ProductKind product, int *error);
GRIB API 中以 grib_
开头的函数在 ecCodes 依然存在。例如
grib_handle* grib_handle_new_from_file(grib_context* c, FILE* f, int* error);
一个使用 ecCodes 接口(Fortran/C/Python)的代码包括以下步骤
以上框架对 BUFR 数据也适用。
所有的函数都以一个可选的参数,用于错误处理。
grib_handle* grib_handle_new_from_file(grib_context* c, FILE* f, int* error);
上面代码中的 error 就是错误返回码。
如果没有指定 error 并且函数调用发生错误,整个程序会退出,并返回错误代码。
请使用 error 处理错误,例如,在 MPI 并行程序中需要处理错误,下面用 Fortran 代码说明。
call codes_grib_new_from_samples(igrib, samplename, status)
if (status /= 0) then
call codes_get_error_string(status,err_msg) or grib_get_error_string
print*,’ECCODES Error: ’,trim(err_msg),’ (err=‘,status,’)’
call mpi_finalize(ierr)
stop
end if
请在如下网站查询错误代码和它们的含义:
http://download.ecmwf.int/test-data/eccodes/html/group__errors.html