package ucar.nc2.iosp.grib; import org.junit.Assert; import org.junit.Test; import org.junit.experimental.categories.Category; import ucar.nc2.Attribute; import ucar.nc2.Group; import ucar.nc2.NetcdfFile; import ucar.nc2.Variable; import ucar.unidata.util.test.category.NeedsCdmUnitTest; import ucar.unidata.util.test.TestDir; import java.io.IOException; /** * Created by rmay on 5/22/15. */ @Category(NeedsCdmUnitTest.class) public class TestGribSpheroids { String dir = TestDir.cdmUnitTestDir + "formats/grib2/"; @Test public void code0_assume_spherical() throws IOException { String filename = dir + "grid174_scanmode_64_example.grb2"; try (NetcdfFile ncfile = NetcdfFile.open(filename, null)) { Variable v = ncfile.findVariable("LatLon_Projection"); Attribute axis = v.findAttribute("earth_radius"); Assert.assertEquals(6367470., axis.getNumericValue().doubleValue(), 0.1); } } @Test public void code1_spherical_specified() throws IOException { String filename = dir + "LDUE18.grib2"; try (NetcdfFile ncfile = NetcdfFile.open(filename, null)) { Variable v = ncfile.findVariable("LambertConformal_Projection"); Attribute axis = v.findAttribute("earth_radius"); Assert.assertEquals(6371200., axis.getNumericValue().doubleValue(), 0.1); } } // Exercises code path that corrects bad values of earth radius @Test public void code1_spherical_specified_bad() throws IOException { String filename = dir + "sfc_d01_20080430_1200_f00000.grb2"; try (NetcdfFile ncfile = NetcdfFile.open(filename, null)) { Variable v = ncfile.findVariable("LambertConformal_Projection"); Attribute axis = v.findAttribute("earth_radius"); Assert.assertEquals(6371200., axis.getNumericValue().doubleValue(), 0.1); } } @Test public void code2_assume_oblate_iau() throws IOException { String filename = dir + "MESH_20070326-162126.grib"; try (NetcdfFile ncfile = NetcdfFile.open(filename, null)) { Variable v = ncfile.findVariable("LatLon_Projection"); Attribute axis = v.findAttribute("semi_major_axis"); Assert.assertEquals(6378160., axis.getNumericValue().doubleValue(), 0.1); axis = v.findAttribute("semi_minor_axis"); Assert.assertEquals(6356684.7, axis.getNumericValue().doubleValue(), 0.1); // We use the inverse flattening, not the specified minor } } @Test public void code3_oblate_specified_km() throws IOException { String filename = dir + "Eumetsat.VerticalPerspective.grb"; try (NetcdfFile ncfile = NetcdfFile.open(filename, null)) { Variable v = ncfile.findVariable("SpaceViewPerspective_Projection"); Attribute axis = v.findAttribute("semi_major_axis"); Assert.assertEquals(6378140., axis.getNumericValue().doubleValue(), 0.1); axis = v.findAttribute("semi_minor_axis"); Assert.assertEquals(6356755., axis.getNumericValue().doubleValue(), 0.1); } } @Test public void code5_assume_WGS84() throws IOException { String filename = dir + "Albers_viirs_s.grb2"; try (NetcdfFile ncfile = NetcdfFile.open(filename, null)) { Variable v = ncfile.findVariable("AlbersEqualArea_Projection"); Attribute axis = v.findAttribute("semi_major_axis"); Assert.assertEquals(6378137., axis.getNumericValue().doubleValue(), 0.1); } } @Test public void code6_assume_spherical() throws IOException { String filename = dir + "berkes.grb2"; try (NetcdfFile ncfile = NetcdfFile.open(filename, null)) { Group grp = ncfile.getRootGroup().getGroups().get(0); Variable v = grp.findVariable("LatLon_Projection"); Attribute axis = v.findAttribute("earth_radius"); Assert.assertEquals(6371229., axis.getNumericValue().doubleValue(), 0.1); } } @Test public void code7_oblate_specified_m() throws IOException { String filename = dir + "TT_FC_INCA.grb2"; try (NetcdfFile ncfile = NetcdfFile.open(filename, null)) { Variable v = ncfile.findVariable("LambertConformal_Projection"); Attribute axis = v.findAttribute("semi_major_axis"); Assert.assertEquals(6377397., axis.getNumericValue().doubleValue(), 0.1); } } }