API example: grib_set_data for Fortran

This commit is contained in:
Shahram Najm 2016-11-21 15:15:28 +00:00
parent 1b89895fc6
commit 3a3255cd2f
8 changed files with 114 additions and 17 deletions

View File

@ -72,6 +72,7 @@ list( APPEND tests
grib_copy_message
grib_ensemble_index
grib_set_pv
grib_set_data
grib_set_bitmap
grib_list
grib_get_data

View File

@ -66,7 +66,7 @@ int main(int argc, char** argv)
for (i=0;i<values_len;i++) {
if (count>100) {e*=10; count=1;}
values[i]=d;
printf("%g \n",values[i]);
/*printf("%g \n",values[i]);*/
d+=e;
count++;
}

16
examples/C/grib_set_data.sh Executable file
View File

@ -0,0 +1,16 @@
#!/bin/sh
# Copyright 2005-2016 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.
. ./include.sh
OUT=temp.c_grib_set_data.out.grib
${examples_dir}c_grib_set_data $OUT
rm -f $OUT

View File

@ -25,6 +25,7 @@ list( APPEND tests
grib_set_bitmap
grib_set_missing
grib_set_pv
grib_set_data
grib_samples
grib_count_messages
grib_count_messages_multi

View File

@ -29,10 +29,10 @@ program sample
indicatorOfParameter = 61
decimalPrecision = 2
! A new grib message is loaded from an existing sample.
! Samples are searched in a default sample path (use codes_info
! to see where that is). The default sample path can be changed by
! setting the environment variable ECCODES_SAMPLES_PATH
! A new grib message is loaded from an existing sample.
! Samples are searched in a default sample path (use codes_info
! to see where that is). The default sample path can be changed by
! setting the environment variable ECCODES_SAMPLES_PATH
call codes_grib_new_from_samples(igribsample, "regular_latlon_surface.grib1")
call codes_open_file(outfile, 'f_out.samples.grib1','w')

View File

@ -0,0 +1,63 @@
! Copyright 2005-2016 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: set the data contained in a GRIB file.
! In this example no missing values are present.
! If there are missing values, refer to: grib_set_bitmap
!
program set_data
use eccodes
implicit none
integer :: outfile
integer :: i, igrib, iret, numberOfValues, cnt
real :: d, e
real, dimension(:), allocatable :: values
integer, parameter :: max_strsize = 200
character(len=max_strsize) :: outfile_name
call getarg(1, outfile_name)
call codes_open_file(outfile,outfile_name,'w')
! Note: the full name of the sample file is "regular_ll_pl_grib1.tmpl"
! Sample files are stored in the samples directory (use codes_info to
! see where that is). The default sample path can be changed by
! setting the environment variable ECCODES_SAMPLES_PATH
call codes_grib_new_from_samples(igrib, 'regular_ll_pl_grib1')
! Here we're changing the data values only, so the number of values
! will be the same as the sample GRIB.
! But if your data array has a different size, then specify the grid geometry
! (e.g. keys Ni, Nj etc) and set the correct number of data values
call codes_get_size(igrib,'values',numberOfValues)
allocate(values(numberOfValues), stat=iret)
d = 10e-8
e = d
cnt = 1
do i=1,numberOfValues
if (cnt>100) then
e = e*10
cnt=1
endif
values(i) = d
!print *, values(i)
d = d + e
cnt = cnt + 1
end do
call codes_set(igrib, 'bitsPerValue', 16)
! set data values
call codes_set(igrib,'values', values)
call codes_write(igrib,outfile)
call codes_release(igrib)
deallocate(values)
end program set_data

16
examples/F90/grib_set_data.sh Executable file
View File

@ -0,0 +1,16 @@
#!/bin/sh
# Copyright 2005-2016 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.
. ./include.sh
OUT=temp.f_grib_set_data.out.grib
${examples_dir}eccodes_f_grib_set_data $OUT
rm -f $OUT

View File

@ -30,11 +30,11 @@ program grib_set_pv
form="formatted",action="read")
do i=1,numberOfCoefficients,2
read(unit=1,fmt=*, iostat=ios) pv(i), pv(i+1)
if (ios /= 0) then
print *, "I/O error: ",ios
exit
end if
read(unit=1,fmt=*, iostat=ios) pv(i), pv(i+1)
if (ios /= 0) then
print *, "I/O error: ",ios
exit
end if
end do
! print coefficients
@ -46,25 +46,25 @@ program grib_set_pv
call codes_open_file(outfile, 'out.pv.grib1','w')
! a new grib message is loaded from file
! igrib is the grib id to be used in subsequent calls
! A new grib message is loaded from file
! igrib is the grib id to be used in subsequent calls
call codes_grib_new_from_samples(igrib, "reduced_gg_sfc_grib1")
! set levtype to ml (model level)
! set levtype to ml (model level)
call codes_set(igrib,'typeOfLevel','hybrid')
! set level
! set level
call codes_set(igrib,'level',2)
! set PVPresent as an integer
! set PVPresent as an integer
call codes_set(igrib,'PVPresent',1)
call codes_set(igrib,'pv',pv)
! write modified message to a file
! write modified message to a file
call codes_write(igrib,outfile)
! FREE MEMORY
! Free memory
call codes_release(igrib)
deallocate(pv)