Hi John, did you have time yet to have a look into this? Regards, Jochen Am 02.01.2014 um 16:05 schrieb Jochen Kähler <jkaehler@xxxxxxxxxxxxxxx>: > Hi John, > > so, here’s my changes: > https://github.com/lost-carrier/thredds/commit/bfcad3beb80c8361d1b512d6d75c6ae4b9d22d68 > > …now reporting… > 2014-01-02 15:56:30,274 INFO : Grib1Helper - min = 0.0 max = 100.0 > > …instead of previously... > 2014-01-02 13:48:52,319 INFO : Grib1Helper - min = -4.462653160095215 max = > 108.53846740722656 > > The images in the attachment are using a dynamic scale, but retain the same > structure/pattern... > > I added an additional parameter to switch between linear and cubic > interpolation, that’s why Grib1Record.java and Grib2Record.java are also > touched with this commit. > > Feedback is welcome... > > Happy new year! ;-) > > Jochen > <rh-linear.png><rh-cubic.png> > Am 11.12.2013 um 17:41 schrieb John Caron <caron@xxxxxxxxxxxxxxxx>: > >> Hi Jochen: >> >> if you wanted to provide an alternative implementation of >> >> ucar.nc2.grib.QuasiRegular.java >> >> you could use it in your own fork, and i will think about a way to >> configure which to use. >> >> John >> >> On 12/11/2013 9:34 AM, Jochen Kähler wrote: >>> 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: