! Copyright 2005-2007 ECMWF ! ! Licensed under the GNU Lesser General Public License which ! incorporates the terms and conditions of version 3 of the GNU ! General Public License. ! See LICENSE and gpl-3.0.txt for details. ! ! ! Description: how to set a bitmap in a grib message ! ! ! Author: Enrico Fucile ! ! program set_bitmap use grib_api implicit none integer :: infile,outfile integer :: igrib, iret integer :: numberOfValues real, dimension(:), allocatable :: values real :: missingValue logical :: grib1Example grib1Example=.true. if (grib1Example) then ! GRIB 1 example call grib_open_file(infile,'../../data/regular_latlon_surface.grib1','r') else ! GRIB 2 example call grib_open_file(infile,'../../data/regular_latlon_surface.grib2','r') end if call grib_open_file(outfile,'out.grib','w') ! a new grib message is loaded from file ! igrib is the grib id to be used in subsequent calls call grib_new_from_file(infile,igrib) ! The missingValue is not coded in the message. ! It is a value we define as a placeholder for a missing value ! in a point of the grid. ! It should be choosen in a way that it cannot be confused ! with a valid field value missingValue=9999 call grib_set(igrib, 'missingValue',missingValue) write(*,*) 'missingValue=',missingValue ! get the size of the values array call grib_get_size(igrib,'values',numberOfValues) write(*,*) 'numberOfValues=',numberOfValues allocate(values(numberOfValues), stat=iret) ! get data values call grib_get(igrib,'values',values) ! enable bitmap call grib_set(igrib,"bitmapPresent",1) ! some values are missing values(1:10) = missingValue ! set the values (the bitmap will be automatically built) call grib_set(igrib,'values', values) ! write modified message to a file call grib_write(igrib,outfile) ! FREE MEMORY call grib_release(igrib) call grib_close_file(infile) call grib_close_file(outfile) deallocate(values) end program set_bitmap