Re: [netcdf-java] Grib1 Gaussian Grid Relative Humidity Interpolation Issue

Hi John,

I hope it works via E-Mail…?

Thanks,
Jochen

Attachment: dpd_test.grib
Description: Binary data

Am 18.11.2013 um 17:01 schrieb John Caron <caron@xxxxxxxxxxxxxxxx>:

> Hi Jochen:
> 
> Yes, please send us the single grib record, so we can test.
> 
> thanks!
> 
> John
> 
> On 11/15/2013 6:04 AM, Jochen Kähler wrote:
>> Hi all,
>> 
>> we’re implementing some service that reads ECMWF 0.125° Grib files in
>> gaussian grid. The NetCDF-Library automatically interpolates the
>> gaussian grid to a regular lat/lon-grid. For the relative humidity we
>> found some strange values in output after that interpolation.
>> 
>> Using wgrib I’ve extracted some isobaric relative humidity record to a
>> single grib file called „dpd_test.grib“ (which i could send as well if
>> needed). According to wgrib, it is an gaussian grid and min and max
>> values are 0% and 100% - as I would expect them for a relative humidity
>> (see attached output).
>> 
>> Next I’ve written a small program which extracts that relative humidity
>> parameter via netcdf-java-lib and step thru all values to find minimum
>> and maximum in it. Source is also attached - just in case I did
>> something wrong there.
>> 
>> The output of that states the following...
>> 2013-11-14 13:45:15,378 INFO : App -
>> dpd_test.grib/Relative_humidity_isobaric/850.0hPa:
>> min=-4.462653160095215 max=108.53846740722656
>> …indicating the minimum relative humidity is around -4.46% and the
>> maximum at 108.54%.
>> 
>> Browsing your code on Github I think you’re using cubic interpolation to
>> convert gaussian to regular grid, which might cause this problem.
>> https://github.com/Unidata/thredds/blob/6b1052455e597797f3a5980165a23292172920ce/grib/src/main/java/ucar/nc2/grib/QuasiRegular.java
>>  Line
>> 219 - 221:
>> outpt[oIdx] = (float) (a * inpt[iIdx + low] + b * inpt[iIdx + hi]
>>         + ((a * a * a - a) * y2d[low]
>>         + (b * b * b - b) * y2d[hi]) / 6.0);
>> Is the problem in the parametrization of this formula?
>> 
>> Is it possible to use Linear Interpolation here?
>> 
>> Kind Regards,
>> Jochen
>> 
>> 
>> 
>> — wgrib output ---------------
>> Losty-MacBook:Desktop jkaehler$ ~/wgrib/wgrib -V dpd_test.grib
>> rec 1:0:date 2013111300 R kpds5=157 kpds6=100 kpds7=850 levels=(3,82)
>> grid=255 850 mb 6hr fcst:
>>   R=Relative humidity [%]
>>   timerange 0 P1 6 P2 0 TimeU 1  nx -1 ny 800 GDS grid 4 num_in_ave 0
>> missing 0
>>   center 98 subcenter 0 process 143 Table 128 scan: WE:NS winds(N/S)
>>   thinned gaussian: lat  89.828000 to -89.828000
>>           long 0.000000 to 359.900000, 843490 grid pts   (-1 x 800)
>> scan 0 mode 0 bdsgrid 1
>>       18   25   32   40   45   50   60   60   72   72   75   81   90
>> 96  100
>>      108  120  120  125  128  144  144  150  160  160  180  180  192
>>  192  200
>>      200  216  216  225  240  240  240  250  250  256  270  288  288
>>  288  300
>>      300  320  320  320  324  360  360  360  360  360  360  375  375
>>  384  400
>>      400  400  405  432  432  432  432  450  450  450  480  480  480
>>  480  480
>>      486  500  500  512  512  540  540  540  540  540  576  576  576
>>  576  576
>>      576  600  600  600  600  640  640  640  640  640  640  640  648
>>  675  675
>>      675  675  675  720  720  720  720  720  720  720  729  729  750
>>  750  750
>>      750  768  768  768  800  800  800  800  800  800  810  864  864
>>  864  864
>>      864  864  864  864  864  864  900  900  900  900  900  900  900
>>  960  960
>>      960  960  960  960  960  960  960  960  960  960  972  972 1000
>> 1000 1000
>>     1000 1000 1000 1024 1024 1024 1024 1024 1080 1080 1080 1080 1080
>> 1080 1080
>>     1080 1080 1080 1080 1125 1125 1125 1125 1125 1125 1125 1125 1125
>> 1152 1152
>>     1152 1152 1152 1152 1200 1200 1200 1200 1200 1200 1200 1200 1200
>> 1200 1200
>>     1215 1215 1215 1215 1280 1280 1280 1280 1280 1280 1280 1280 1280
>> 1280 1280
>>     1280 1280 1280 1280 1280 1296 1296 1296 1296 1350 1350 1350 1350
>> 1350 1350
>>     1350 1350 1350 1350 1350 1350 1350 1350 1350 1440 1440 1440 1440
>> 1440 1440
>>     1440 1440 1440 1440 1440 1440 1440 1440 1440 1440 1440 1440 1440
>> 1440 1440
>>     1440 1440 1440 1440 1440 1440 1440 1458 1458 1458 1458 1458 1458
>> 1458 1500
>>     1500 1500 1500 1500 1500 1500 1500 1500 1500 1500 1500 1500 1500
>> 1500 1500
>>     1500 1536 1536 1536 1536 1536 1536 1536 1536 1536 1536 1536 1536
>> 1536 1536
>>     1536 1536 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600
>> 1600 1600
>>     1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600
>> 1600 1600
>>     1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600
>> 1600 1600
>>     1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600
>> 1600 1600
>>     1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600
>> 1600 1600
>>     1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600
>> 1600 1600
>>     1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600
>> 1600 1600
>>     1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600
>> 1600 1600
>>     1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600
>> 1600 1600
>>     1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600
>> 1600 1600
>>     1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600 1600
>> 1600 1600
>>     1600 1600 1600 1536 1536 1536 1536 1536 1536 1536 1536 1536 1536
>> 1536 1536
>>     1536 1536 1536 1536 1500 1500 1500 1500 1500 1500 1500 1500 1500
>> 1500 1500
>>     1500 1500 1500 1500 1500 1500 1458 1458 1458 1458 1458 1458 1458
>> 1440 1440
>>     1440 1440 1440 1440 1440 1440 1440 1440 1440 1440 1440 1440 1440
>> 1440 1440
>>     1440 1440 1440 1440 1440 1440 1440 1440 1440 1440 1440 1350 1350
>> 1350 1350
>>     1350 1350 1350 1350 1350 1350 1350 1350 1350 1350 1350 1296 1296
>> 1296 1296
>>     1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280 1280
>> 1280 1280
>>     1280 1215 1215 1215 1215 1200 1200 1200 1200 1200 1200 1200 1200
>> 1200 1200
>>     1200 1152 1152 1152 1152 1152 1152 1125 1125 1125 1125 1125 1125
>> 1125 1125
>>     1125 1080 1080 1080 1080 1080 1080 1080 1080 1080 1080 1080 1024
>> 1024 1024
>>     1024 1024 1000 1000 1000 1000 1000 1000  972  972  960  960  960
>>  960  960
>>      960  960  960  960  960  960  960  900  900  900  900  900  900
>>  900  864
>>      864  864  864  864  864  864  864  864  864  810  800  800  800
>>  800  800
>>      800  768  768  768  750  750  750  750  729  729  720  720  720
>>  720  720
>>      720  720  675  675  675  675  675  648  640  640  640  640  640
>>  640  640
>>      600  600  600  600  576  576  576  576  576  576  540  540  540
>>  540  540
>>      512  512  500  500  486  480  480  480  480  480  450  450  450
>>  432  432
>>      432  432  405  400  400  400  384  375  375  360  360  360  360
>>  360  360
>>      324  320  320  320  300  300  288  288  288  270  256  250  250
>>  240  240
>>      240  225  216  216  200  200  192  192  180  180  160  160  150
>>  144  144
>>      128  125  120  120  108  100   96   90   81   75   72   72   60
>> 60   50
>>       45   40   32   25   18
>>   min/max data 0 100  num bits 8  BDS_Ref 0  DecScale 0 BinScale -1
>> ——
>> 
>> 
>> — Java-Source ——
>> GridDataset dataset = GridDataset.open(gribFile.getAbsolutePath());
>> 
>> try {
>> GridDatatype grid = dataset.findGridDatatype("Relative_humidity_isobaric");
>> if(grid != null) {
>> CoordinateAxis1D isbl = grid.getCoordinateSystem().getVerticalAxis();
>> double[] isblValues = isbl.getCoordValues();
>> for (int isblIdx = 0; isblIdx < isblValues.length; isblIdx++) {
>> double[] data = (double[]) grid.readDataSlice(0, isblIdx, -1,
>> -1).get1DJavaArray(double.class);
>> double min = Double.MAX_VALUE;
>> double max = Double.MIN_VALUE;
>> for (double d : data) {
>> min = Math.min(min, d);
>> max = Math.max(max, d);
>>        }
>> LOG.info("{}/{}/{}{}: min={} max={}", gribFile.getName(),
>> grid.getFullName(), isblValues[isblIdx], isbl.getUnitsString(), min, max);
>> }
>> }
>> } finally {
>> if (dataset != null) {
>> dataset.close();
>> }
>> }
>> 
>> --------
>> 
>> 
>> _______________________________________________
>> netcdf-java mailing list
>> netcdf-java@xxxxxxxxxxxxxxxx
>> For list information or to unsubscribe, visit: 
>> http://www.unidata.ucar.edu/mailing_lists/
>> 
> 
> _______________________________________________
> netcdf-java mailing list
> netcdf-java@xxxxxxxxxxxxxxxx
> For list information or to unsubscribe, visit: 
> http://www.unidata.ucar.edu/mailing_lists/ 

Attachment: smime.p7s
Description: S/MIME cryptographic signature

  • 2013 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: