private void readVert(GridDatatype gdt, int rtIndex, int tIndex, Dimension zDim) throws IOException { if (zDim != null) { CoordinateAxis1D zcoord = gdc.getVerticalAxis(); boolean isLayer = zcoord.isInterval(); for (int z = 0; z < zDim.getLength(); z++) { if (isLayer) { dtCoords.setVertCoordIntv(zcoord.getCoordBounds(z)); } else { dtCoords.setVertCoord(zcoord.getCoordValue(z)); } readAndTestGrib(gdt, rtIndex, tIndex, z); } } else { readAndTestGrib(gdt, rtIndex, tIndex, -1); } }
@Test public void TestCFWriterCoverageRead() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "ncss/test/GFS_CONUS_80km_20120227_0000.grib1.nc4"; logger.info("open {}", endpoint); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { assert cc != null; Assert.assertEquals(1, cc.getCoverageCollections().size()); CoverageCollection gds = cc.getCoverageCollections().get(0); Assert.assertNotNull(endpoint, gds); Assert.assertEquals(FeatureType.FMRC, gds.getCoverageType()); String covName = "Temperature_isobaric"; Coverage cover = gds.findCoverage(covName); Assert.assertNotNull(covName, cover); long size = cover.getSizeInBytes(); Assert.assertEquals(25243920, size); SubsetParams subset = new SubsetParams().setVertCoord(300.0).setTimeOffset(42.0); GeoReferencedArray geo = cover.readData(subset); Array data = geo.getData(); logger.info("{}", Misc.showInts(data.getShape())); } } }
@Test public void testBestTimeOffsetCoord() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "gribCollections/gfs_2p5deg/gfs_2p5deg.ncx4"; String covName = "Temperature_altitude_above_msl"; logger.debug("testBestPresent Dataset {} coverage {}", endpoint, covName); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { Assert.assertNotNull(endpoint, cc); CoverageCollection gcs = cc.findCoverageDataset(FeatureType.GRID); Assert.assertNotNull("gcs", gcs); Coverage cover = gcs.findCoverage(covName); Assert.assertNotNull(covName, cover); SubsetParams params = new SubsetParams(); params.setTimeOffset(48.0); params.setVertCoord(3658.0); logger.debug(" subset {}", params); GeoReferencedArray geo = cover.readData(params); // should not be missing ! assert !Float.isNaN(geo.getData().getFloat(0)); Array data = geo.getData(); Index ai = data.getIndex(); float testValue = data.getFloat(ai.set(0, 0, 3, 0)); Assert2.assertNearlyEquals(250.5, testValue); } }
result.setVertCoord( (Double) coord); else if (coord instanceof double[]) result.setVertCoordIntv((double[]) coord);
@Test public void TestMRUTCRead() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "gribCollections/anal/HRRRanalysis.ncx4"; logger.debug("open {}", endpoint); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { assert cc != null; Assert.assertEquals(1, cc.getCoverageCollections().size()); CoverageCollection gds = cc.getCoverageCollections().get(0); Assert.assertEquals(FeatureType.GRID, gds.getCoverageType()); String covName = "Temperature_isobaric"; Coverage cover = gds.findCoverage(covName); Assert.assertNotNull(covName, cover); long size = cover.getSizeInBytes(); Assert.assertEquals(4*5*1377*2145*4, size); SubsetParams subset = new SubsetParams().setVertCoord(70000).setTimeOffset(2); GeoReferencedArray geo = cover.readData(subset); Array data = geo.getData(); logger.debug("{}", Misc.showInts(data.getShape())); Assert.assertArrayEquals(new int[]{1, 1, 1377, 2145}, data.getShape()); float val = data.getFloat(40600); logger.debug("data val at {} = {}", 40600, val); Assert2.assertNearlyEquals(281.627563, val); val = data.getFloat(55583); logger.debug("data val at {} = {}", 55583, val); Assert2.assertNearlyEquals(281.690063, val); } }
.setTimeOffset(42).setVertCoord(500); GeoReferencedArray geo = cover.readData(subset); Array data = geo.getData();
@Test public void testBestPresent() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "gribCollections/gfs_2p5deg/gfs_2p5deg.ncx4"; String covName = "Temperature_altitude_above_msl"; logger.debug("testBestPresent Dataset {} coverage {}", endpoint, covName); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { Assert.assertNotNull(endpoint, cc); CoverageCollection gcs = cc.findCoverageDataset(FeatureType.GRID); Assert.assertNotNull("gcs", gcs); Coverage cover = gcs.findCoverage(covName); Assert.assertNotNull(covName, cover); SubsetParams params = new SubsetParams(); params.set(SubsetParams.timePresent, true); params.setVertCoord(3658.0); logger.debug(" subset {}", params); GeoReferencedArray geo = cover.readData(params); // should not be missing ! assert !Float.isNaN(geo.getData().getFloat(0)); Array data = geo.getData(); Index ai = data.getIndex(); float testValue = data.getFloat(ai.set(0, 0, 3, 0)); Assert2.assertNearlyEquals(244.8f, testValue); } }
@Test public void testBestTimeCoord() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "gribCollections/gfs_2p5deg/gfs_2p5deg.ncx4"; String covName = "Temperature_altitude_above_msl"; logger.debug("testBestPresent Dataset {} coverage {}", endpoint, covName); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { Assert.assertNotNull(endpoint, cc); CoverageCollection gcs = cc.findCoverageDataset(FeatureType.GRID); Assert.assertNotNull("gcs", gcs); Coverage cover = gcs.findCoverage(covName); Assert.assertNotNull(covName, cover); SubsetParams params = new SubsetParams(); params.setTime(CalendarDate.parseISOformat(null, "2015-03-03T00:00:00Z")); params.setVertCoord(3658.0); logger.debug(" subset {}", params); GeoReferencedArray geo = cover.readData(params); // should not be missing ! assert !Float.isNaN(geo.getData().getFloat(0)); Array data = geo.getData(); Index ai = data.getIndex(); float testValue = data.getFloat(ai.set(0, 0, 0, 0)); Assert2.assertNearlyEquals(244.3f, testValue); } }
@Test public void TestBestRead() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "gribCollections/gfs_conus80/gfsConus80_file.ncx4"; logger.debug("open {}", endpoint); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { assert cc != null; Assert.assertEquals(2, cc.getCoverageCollections().size()); CoverageCollection gds = cc.getCoverageCollections().get(1); Assert.assertEquals(FeatureType.GRID, gds.getCoverageType()); String covName = "Temperature_isobaric"; Coverage cover = gds.findCoverage(covName); Assert.assertNotNull(covName, cover); long size = cover.getSizeInBytes(); Assert.assertEquals(41*29*65*93*4, size); SubsetParams subset = new SubsetParams().setVertCoord(300.0).setTime(useDate); GeoReferencedArray geo = cover.readData(subset); Array data = geo.getData(); logger.debug("{}", Misc.showInts(data.getShape())); Assert.assertArrayEquals(new int[] {1,1,65,93}, data.getShape()); float first = data.getFloat(0); float last = data.getFloat((int)data.getSize()-1); logger.debug("data first = {} last = {}", first, last); Assert2.assertNearlyEquals(241.699997, first); Assert2.assertNearlyEquals(225.099991, last); } }
@Test public void TestSRCRead() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "gribCollections/gfs_conus80/20141025/GFS_CONUS_80km_20141025_0000.grib1.ncx4"; logger.debug("open {}", endpoint); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { assert cc != null; Assert.assertEquals(1, cc.getCoverageCollections().size()); CoverageCollection gds = cc.getCoverageCollections().get(0); Assert.assertEquals(FeatureType.GRID, gds.getCoverageType()); String covName = "Temperature_isobaric"; Coverage cover = gds.findCoverage(covName); Assert.assertNotNull(covName, cover); long size = cover.getSizeInBytes(); Assert.assertEquals(25243920, size); SubsetParams subset = new SubsetParams().setVertCoord(200.0).setTimeOffset(42.0); GeoReferencedArray geo = cover.readData(subset); Array data = geo.getData(); logger.debug("{}", Misc.showInts(data.getShape())); Assert.assertArrayEquals(new int[] {1,1,65,93}, data.getShape()); float first = data.getFloat(0); float last = data.getFloat((int)data.getSize()-1); logger.debug("data first = {} last = {}", first, last); Assert2.assertNearlyEquals(219.5f, first); Assert2.assertNearlyEquals(218.6f, last); } }
@Test public void TestTwoDRead() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "gribCollections/gfs_conus80/gfsConus80_file.ncx4"; logger.debug("open {}", endpoint); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { assert cc != null; Assert.assertEquals(2, cc.getCoverageCollections().size()); CoverageCollection gds = cc.getCoverageCollections().get(0); Assert.assertEquals(FeatureType.FMRC, gds.getCoverageType()); String covName = "Temperature_isobaric"; Coverage cover = gds.findCoverage(covName); Assert.assertNotNull(covName, cover); long size = cover.getSizeInBytes(); Assert.assertEquals(6*36*29*65*93*4, size); // LOOK if we dont set the runtime, assume latest. driven by Cdmrf spec. could be different. SubsetParams subset = new SubsetParams().setVertCoord(300.0).setTime(useDate); GeoReferencedArray geo = cover.readData(subset); Array data = geo.getData(); logger.debug("{}", Misc.showInts(data.getShape())); Assert.assertArrayEquals(new int[] {1,1,1,65,93}, data.getShape()); float first = data.getFloat(0); float last = data.getFloat((int)data.getSize()-1); logger.debug("data first = {} last = {}", first, last); Assert2.assertNearlyEquals(241.699997, first); Assert2.assertNearlyEquals(225.099991, last); } }
@Test public void TestNetcdfCurvilinear() throws IOException, InvalidRangeException { String endpoint = TestDir.cdmUnitTestDir + "ft/coverage/Run_20091025_0000.nc"; // NetCDF has 2D and 1D logger.debug("open {}", endpoint); try (FeatureDatasetCoverage cc = CoverageDatasetFactory.open(endpoint)) { assert cc != null; Assert.assertEquals(1, cc.getCoverageCollections().size()); CoverageCollection gds = cc.getCoverageCollections().get(0); Assert.assertNotNull(endpoint, gds); Assert.assertEquals(FeatureType.CURVILINEAR, gds.getCoverageType()); Assert.assertEquals(20, gds.getCoverageCount()); String covName = "u"; Coverage cover = gds.findCoverage(covName); Assert.assertNotNull(covName, cover); SubsetParams params = new SubsetParams().setVertCoord(-.05).set(SubsetParams.timePresent, true); GeoReferencedArray geo = cover.readData(params); Array data = geo.getData(); Index ima = data.getIndex(); int[] expectedShape = new int[] {1,1,22,12}; Assert.assertArrayEquals(expectedShape, data.getShape()); Assert2.assertNearlyEquals(0.0036624447, data.getDouble(ima.set(0, 0, 0, 0)), 1e-6); Assert2.assertNearlyEquals(0.20564626, data.getDouble(ima.set(0, 0, 21, 11)), 1e-6); } }
subset.setTimeOffset(time_offset); if (vert_level != null) subset.setVertCoord(vert_level);