예제 #1
0
    def test_load(self):

        # Test loading a file that doesn't exist
        pf = PltFile("file that does not exist")
        self.assertEqual(pf.defined, False)

        # Test loading a file that does exist
        pf = PltFile(self.DATA_FILE, load_data=True)
        self.assertEqual(pf.num_levels, 3)
        self.assertEqual(pf.plot_prefix, "plt")
        self.assertEqual(pf.frame, 100)

        # Test pretty printing object
        logging.info(pf)

        # Test loading after data already loaded (should do nothing)
        pf.load_data()

        # Check data is correct
        for pf in [PltFile(self.CHK_DATA_FILE), PltFile(self.DATA_FILE)]:
            pf.load_data()
            max_enthalpy = float(pf.get_level_data("Enthalpy", level=0).max())
            self.assertAlmostEqual(max_enthalpy, 6.302214, 6)
            max_enthalpy = float(pf.get_level_data("Enthalpy", level=2).max())
            self.assertAlmostEqual(max_enthalpy, 6.307355035152367, 6)

            # Test removing data
            pf.unload_data()
            self.assertEqual(pf.data_loaded, False)

            pf.load_data(zero_x=True)
            assert pf.get_level_data("Enthalpy").coords["x"][0] == 0

            assert np.array_equal(pf.get_levels(), [0, 1, 2])

            outline = pf.level_outlines[2]
            assert np.array_equal(outline.total_bounds, [0, 0.375, 1, 1])
            assert outline.area[0] == 0.53125

            assert pf.get_norm("Enthalpy").vmax == pytest.approx(6.30735504, 5)
            assert pf.get_norm("Enthalpy").vmin == pytest.approx(1.49226642, 5)

            x, y = pf.get_mesh_grid_for_level(1)
            assert len(x) == 32
            assert len(y) == 24

        pf_no_name = PltFile(self.DATA_FILE_NO_FRAME)
        self.assertEqual(pf_no_name.frame, -1)

        pf_no_inputs = PltFile(self.DATA_FILE, inputs_file="does not exist")
        self.assertIsNone(pf_no_inputs.inputs)
        assert str(pf_no_inputs) == "<PltFile object for %s>" % self.DATA_FILE
예제 #2
0
    def test_static_methods(self):
        pf = PltFile(self.DATA_FILE, load_data=True)

        x, y = pf.get_mesh_grid()
        self.assertEqual(len(x), 16)

        x, y = pf.get_mesh_grid(extend_grid=False)
        self.assertEqual(len(x), 15)

        porosity = pf.get_level_data("Porosity")
        x, y = PltFile.get_mesh_grid_n(porosity)
        self.assertEqual(len(x), 16)

        x, y = PltFile.get_mesh_grid_xarray(porosity)
        dx = 0.0625
        assert len(x) == 16
        assert len(y) == 16
        assert x[0] == dx / 2
        assert y[0] == dx / 2
        assert x[-1] == 1 - dx / 2
        assert y[-1] == 1 - dx / 2

        x, y = PltFile.get_mesh_grid_xarray(porosity, grow=True)
        assert len(x) == 17
        assert x[0] == 0.0
        assert y[0] == 0.0
        assert x[-1] == 1.0
        assert y[-1] == 1.0
예제 #3
0
    def test_get_level_data(self):
        pf = PltFile(self.DATA_FILE)

        assert pf.num_levels == 3
        assert pf.get_level_data("does not exist") is None

        valid_only = pf.get_level_data("Porosity", valid_only=True)
        all_data = pf.get_level_data("Porosity", valid_only=False)

        assert len(valid_only.coords["x"]) == 16
        assert len(valid_only.coords["y"]) == 16
        assert np.isnan(valid_only[5, 5])
        assert not all_data.equals(valid_only)

        valid_only = pf.get_level_data("Porosity", level=1, valid_only=True)
        all_data = pf.get_level_data("Porosity", level=1, valid_only=False)
        assert len(valid_only.coords["x"]) == 32
        assert len(valid_only.coords["y"]) == 24
        assert np.isnan(valid_only[20, 20])
        assert not all_data.equals(valid_only)

        valid_only = pf.get_level_data("Porosity", level=2, valid_only=True)
        all_data = pf.get_level_data("Porosity", level=2, valid_only=False)
        assert len(valid_only.coords["x"]) == 64
        assert len(valid_only.coords["y"]) == 40
        assert valid_only.equals(all_data)
예제 #4
0
    def test_child_methods(self):
        pf = PltFile(self.DATA_FILE)
        child = ChildPltFileForTesting(self.DATA_FILE)

        pf.reflect = True
        child.reflect = True
        streamfunction_unreflected = pf.get_level_data("streamfunction")
        streamfunction_reflected = child.get_level_data("streamfunction")

        assert float(streamfunction_reflected[4, 4]) == -float(
            streamfunction_unreflected[4, 4]
        )
예제 #5
0
    def test_plotting(self):
        pf = PltFile(self.DATA_FILE)
        pf.load_data(zero_x=True)
        porosity = pf.get_level_data("Porosity")

        fig = plt.figure()
        ax = fig.gca()
        ax.pcolormesh(porosity.x, porosity.y, porosity)

        # Can only execute these tests if latex is installed
        if is_installed("latex"):
            pf.plot_outlines(ax)
            pf.plot_field("Porosity")
예제 #6
0
    def test_scale_slice_transform(self):
        pf = PltFile(self.DATA_FILE)

        indices = dict(y=slice(0, 3), x=slice(3, 5))

        pf.set_scale_slice_transform(indices, True)

        assert pf.indices == indices
        assert pf.reflect == True

        porosity = pf.get_level_data("Porosity")

        assert len(porosity.coords["x"]) == 2
        assert len(porosity.coords["y"]) == 3
        assert float(porosity[0, 0]) == 1.0

        pf.reset_scale_slice_transform()

        assert pf.indices is None
        assert pf.reflect is None
예제 #7
0
import matplotlib.pyplot as plt
from chombopy.plotting import PltFile, setup_mpl_latex
import matplotlib.cm as cm

pf = PltFile("../tests/data/plt000100.2d.hdf5")

setup_mpl_latex(14)
fig = plt.figure()
ax = plt.gca()
cmap = "viridis"
field = "Temperature"

# Get data for the temperature variable on level 2
for level in pf.get_levels():
    temperature = pf.get_level_data(field, level)

    # temperature is an xarray.DataSet object, which can be plotted using matplotlib
    x, y = pf.get_mesh_grid_for_level(level=level, grow=True)
    ax.pcolormesh(x, y, temperature, cmap=cmap)

    # Or you can do some analysis using the xarray/numpy functionality
    print(temperature.mean())

pf.plot_outlines(ax)

cbar = fig.colorbar(cm.ScalarMappable(norm=pf.get_norm(field), cmap=cmap),
                    ax=ax)
cbar.ax.set_ylabel(field)

plt.savefig("../docs/images/plt000100.jpg")
plt.show()