Description
This example shows: how to set a key as missing.
Source code
grib_set_missing.f90
! (C) Copyright 2005- ECMWF. ! ! This software is licensed under the terms of the Apache Licence Version 2.0 ! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. ! ! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by ! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. ! ! ! Description: how to set a key as missing. ! program set use eccodes implicit none integer :: infile,outfile integer :: igrib, Ni, is_missing infile=5 outfile=6 call codes_open_file(infile, & '../../data/reduced_gaussian_pressure_level.grib2','r') call codes_open_file(outfile, & 'f_out_surface_level.grib2','w') ! a new grib message is loaded from file ! igrib is the grib id to be used in subsequent calls call codes_grib_new_from_file(infile,igrib) call codes_set(igrib,'typeOfFirstFixedSurface','sfc') call codes_set_missing(igrib,'scaleFactorOfFirstFixedSurface') call codes_set_missing(igrib,'scaledValueOfFirstFixedSurface') ! See GRIB-490 call codes_get(igrib, 'Ni', Ni) call codes_is_missing(igrib,'Ni',is_missing) if ( is_missing == 0 ) then ! Ni should be missing in gribs with Reduced Gaussian grids call codes_check(-2, 'Ni_should_be_missing', '') endif call codes_set(igrib, 'Ni', Ni) call codes_write(igrib,outfile) call codes_release(igrib) call codes_close_file(infile) call codes_close_file(outfile) end program set
grib_set_missing.py
# # (C) Copyright 2005- ECMWF. # # This software is licensed under the terms of the Apache Licence Version 2.0 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. # # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. # import traceback import sys from eccodes import * INPUT = '../../data/tigge/tigge_ecmf_pl_t.grib' OUTPUT = 'out.p_set_missing.grib' VERBOSE = 1 # verbose error reporting def example(): fin = open(INPUT, 'rb') fout = open(OUTPUT, 'wb') gid = codes_grib_new_from_file(fin) codes_set_long(gid, "scaledValueOfFirstFixedSurface", 15) codes_set_long(gid, "scaleFactorOfFirstFixedSurface", 1) level = codes_get_double(gid, "level") assert (level == 1.5) # set type of level to surface codes_set(gid, 'typeOfFirstFixedSurface', 'sfc') codes_set_missing(gid, 'scaleFactorOfFirstFixedSurface') codes_set_missing(gid, 'scaledValueOfFirstFixedSurface') codes_write(gid, fout) codes_release(gid) fin.close() fout.close() def main(): try: example() except CodesInternalError as err: if VERBOSE: traceback.print_exc(file=sys.stderr) else: sys.stderr.write(err.msg + '\n') return 1 if __name__ == "__main__": sys.exit(main())