Hi, hmm… did you have the chance to look deeper into this issue, yet? Thanks, Jochen Am 25.11.2013 um 17:35 schrieb Jochen Kähler <jkaehler@xxxxxxxxxxxxxxx>: > Hi John, > > that an easy one: let’s go for option #4! ;-) ... > > Well, regarding to our current project, linear interpolation would be totally > fine. If we could get some configuration switch or even some option to change > interpolationmethod programmatically, that would be excellent. > > Wgrib provides access to the original numbers - that would be an interesting > option as well. As my colleague Martijn already pointed out here: > http://www.unidata.ucar.edu/mailing_lists/archives/netcdf-java/2013/msg00125.html > , we also have some issues around the chosen resolution, which we could work > around in a somewhat more elegant way if we had access to the raw data... > > Jochen > > Am 19.11.2013 um 18:37 schrieb John Caron <caron@xxxxxxxxxxxxxxxx>: > >> Hi Jochen: >> >> We call these "reduced grids" or "thin grids", their use is technically >> independent of whether its a gaussian lat/lon (just means the lats are >> spaced with a gaussian), although in practice they often go together >> (perhaps always in the model - im just talking about the output files). We >> probably stole the cubic spline code from GEMPAK/nawips which made us think >> it was a reassonable thing to do. >> >> IFAIU, cubic splines allow the interpolated numbers to be outside the range >> of existing ones, so at this point i dont suspect an error. >> >> You are right that we could use the actual min, max of the numbers to clip >> the cubic spline results. >> >> Not sure what the right thing to do here is. we could clip it based on >> actual min/max (easy). We could try to make an option to allow linear >> interpolation, which would prevent the interpolated numbers from exceeding >> the min/max of existing numbers (harder). We could try to allow user access >> to the original numbers (harder, need lower level API). We could construct a >> quantity X conserving algorithm, which reads the users' mind as to what X >> should be (requires faster than light technology). >> >> What does wgrib do? >> >> Suggestions from anyone are welcome. >> >> 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/ >>> >> >> _______________________________________________ >> 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
netcdf-java
archives: