def test_writer(self): """`WriteImageDataToSGeMS`: check data integrity across I/O""" writer = WriteImageDataToSGeMS() filename = os.path.join(self.test_dir, 'test-writer.dat') writer.SetFileName(filename) writer.Write(self.GRID) # Now read that data and compare reader = SGeMSGridReader() read = reader.apply(filename) # Compare data truedata = self.GRID.GetCellData() testdata = read.GetCellData() self.assertEqual(truedata.GetNumberOfArrays(), testdata.GetNumberOfArrays()) wtbl = dsa.WrapDataObject(self.GRID) wrd = dsa.WrapDataObject(read) self.assertEqual(self.GRID.GetDimensions(), wrd.GetDimensions()) self.assertEqual(self.GRID.GetOrigin(), wrd.GetOrigin()) self.assertEqual(self.GRID.GetSpacing(), wrd.GetSpacing()) for i in range(truedata.GetNumberOfArrays()): self.assertIsNotNone(wtbl.CellData[i]) self.assertIsNotNone(wrd.CellData[i]) self.assertTrue(np.allclose(wtbl.CellData[i], wrd.CellData[i])) for i in range(self.GRID.GetCellData().GetNumberOfArrays()): self.assertIsNotNone(wtbl.CellData[i]) self.assertIsNotNone(wrd.CellData[i]) self.assertTrue(np.allclose(wtbl.CellData[i], wrd.CellData[i]))
def test_bad_file(self): """`SGeMSGridReader`: check handling of bad input file""" filename = os.path.join(self.test_dir, 'test_bad.dat') header = ['Bad header', '%d' % len(self.titles)] for ln in self.titles: header.append(ln + '\n') header = '\n'.join(header) np.savetxt(filename, self.data, delimiter=' ', header=header, comments='') # Set up the reader reader = SGeMSGridReader() reader.AddFileName(filename) # Perform the read reader.Update() self.assertTrue(reader.error_occurred())
def setUp(self): TestBase.setUp(self) # Create a temporary directory self.test_dir = tempfile.mkdtemp() self.n = 100 self.shape = (150, 200, 20) self.extent = (0, self.shape[0], 0, self.shape[1], 0, self.shape[2]) self.titles = ['Array 1', 'Array 2', 'Array 3'] ##### Now generate output for testing #### filename = os.path.join(self.test_dir, 'test.dat') self.data = np.random.random((self.n, len(self.titles))) header = ['%d %d %d' % self.shape, '%d' % len(self.titles)] for ln in self.titles: header.append(ln + '\n') header = '\n'.join(header) np.savetxt(filename, self.data, delimiter=' ', header=header, comments='') # Set up the reader self.GRID = SGeMSGridReader().apply(filename)
def set_time_delta(self, dt): SGeMSGridReader.set_time_delta(self, dt)
def set_comments(self, identifier): SGeMSGridReader.set_comments(self, identifier)
def set_skip_rows(self, skip): SGeMSGridReader.set_skip_rows(self, skip)
def SetSkipRows(self, skip): SGeMSGridReader.SetSkipRows(self, skip)
def set_origin(self, ox, oy, oz): SGeMSGridReader.set_origin(self, ox, oy, oz)
def SetDelimiter(self, deli): SGeMSGridReader.SetDelimiter(self, deli)
def SetOrigin(self, ox, oy, oz): SGeMSGridReader.SetOrigin(self, ox, oy, oz)
def SetSpacing(self, dx, dy, dz): SGeMSGridReader.SetSpacing(self, dx, dy, dz)
def GetTimestepValues(self): """This is critical for registering the timesteps""" return SGeMSGridReader.GetTimestepValues(self)
def SetTimeDelta(self, dt): SGeMSGridReader.SetTimeDelta(self, dt)
def SetComments(self, identifier): SGeMSGridReader.SetComments(self, identifier)
def get_time_step_values(self): """This is critical for registering the timesteps""" return SGeMSGridReader.get_time_step_values(self)
def set_spacing(self, dx, dy, dz): SGeMSGridReader.set_spacing(self, dx, dy, dz)
def __init__(self): SGeMSGridReader.__init__(self)
class TestSGeMSGridReader(TestBase): """ Test the `SGeMSGridReader` and `WriteImageDataToSGeMS` """ def setUp(self): TestBase.setUp(self) # Create a temporary directory self.test_dir = tempfile.mkdtemp() self.n = 100 self.shape = (150, 200, 20) self.extent = (0, self.shape[0], 0, self.shape[1], 0, self.shape[2]) self.titles = ['Array 1', 'Array 2', 'Array 3'] ##### Now generate output for testing #### filename = os.path.join(self.test_dir, 'test.dat') self.data = np.random.random((self.n, len(self.titles))) header = ['%d %d %d' % self.shape, '%d' % len(self.titles)] for ln in self.titles: header.append(ln + '\n') header = '\n'.join(header) np.savetxt(filename, self.data, delimiter=' ', header=header, comments='') # Set up the reader self.GRID = SGeMSGridReader().apply(filename) def tearDown(self): # Remove the test data directory after the test shutil.rmtree(self.test_dir) TestBase.tearDown(self) ########################################### def test_data_array_titles(self): """`SGeMSGridReader`: data array titles""" for i, title in enumerate(self.titles): self.assertEqual(self.GRID.GetCellData().GetArrayName(i), title) return def test_shape(self): """`SGeMSGridReader`: check output grid shape""" self.assertEqual(self.GRID.GetExtent(), self.extent) self.assertEqual(self.GRID.GetNumberOfCells(), self.extent[1] * self.extent[3] * self.extent[5]) return def test_data(self, ): """`SGeMSGridReader`: data fidelity""" for i, title in enumerate(self.titles): arr = nps.vtk_to_numpy(self.GRID.GetCellData().GetArray(i)) self.assertTrue(np.allclose(self.data[:, i], arr, rtol=RTOL)) return def test_bad_file(self): """`SGeMSGridReader`: check handling of bad input file""" filename = os.path.join(self.test_dir, 'test_bad.dat') header = ['Bad header', '%d' % len(self.titles)] for ln in self.titles: header.append(ln + '\n') header = '\n'.join(header) np.savetxt(filename, self.data, delimiter=' ', header=header, comments='') # Set up the reader reader = SGeMSGridReader() reader.AddFileName(filename) # Perform the read reader.Update() self.assertTrue(reader.error_occurred()) def test_writer(self): """`WriteImageDataToSGeMS`: check data integrity across I/O""" writer = WriteImageDataToSGeMS() filename = os.path.join(self.test_dir, 'test-writer.dat') writer.SetFileName(filename) writer.Write(self.GRID) # Now read that data and compare reader = SGeMSGridReader() read = reader.apply(filename) # Compare data truedata = self.GRID.GetCellData() testdata = read.GetCellData() self.assertEqual(truedata.GetNumberOfArrays(), testdata.GetNumberOfArrays()) wtbl = dsa.WrapDataObject(self.GRID) wrd = dsa.WrapDataObject(read) self.assertEqual(self.GRID.GetDimensions(), wrd.GetDimensions()) self.assertEqual(self.GRID.GetOrigin(), wrd.GetOrigin()) self.assertEqual(self.GRID.GetSpacing(), wrd.GetSpacing()) for i in range(truedata.GetNumberOfArrays()): self.assertIsNotNone(wtbl.CellData[i]) self.assertIsNotNone(wrd.CellData[i]) self.assertTrue(np.allclose(wtbl.CellData[i], wrd.CellData[i])) for i in range(self.GRID.GetCellData().GetNumberOfArrays()): self.assertIsNotNone(wtbl.CellData[i]) self.assertIsNotNone(wrd.CellData[i]) self.assertTrue(np.allclose(wtbl.CellData[i], wrd.CellData[i])) def test_sgems_grid_writer_no_data(self): grid = pyvista.UniformGrid((10, 10, 10), (2, 2, 2)) writer = WriteImageDataToSGeMS() filename = os.path.join(self.test_dir, 'test-writer-no-data.dat') writer.SetFileName(filename) writer.Write(grid) return
def AddFileName(self, filename): SGeMSGridReader.AddFileName(self, filename)
def set_delimiter(self, deli): SGeMSGridReader.set_delimiter(self, deli)
def set_split_on_white_space(self, flag): SGeMSGridReader.set_split_on_white_space(self, flag)
~~~~~~~~~~~~~~~ Read SGeMS Grid file formats. The examples shown here are downloaded from `Multiple-point Geostatistics stochastic modeling with training images <http://www.trainingimages.org/training-images-library.html>`_ website. """ # sphinx_gallery_thumbnail_number = 2 import pyvista from pyvista import examples from PVGeo.gslib import SGeMSGridReader ################################################################################ grid_url = 'http://www.trainingimages.org/uploads/3/4/7/0/34703305/a_wlreferencecat.zip' filename, _ = examples.downloads._retrieve_file(grid_url, 'A_WLreferenceCAT.sgems.zip') grid = SGeMSGridReader().apply(filename) print(grid) ################################################################################ warped = grid.cell_data_to_point_data().warp_by_scalar(scale_factor=5) warped.plot() ################################################################################ grid_url = 'http://www.trainingimages.org/uploads/3/4/7/0/34703305/maules_creek_3d.zip' filename, _ = examples.downloads._retrieve_file(grid_url, 'Maules_Creek_3D.SGEMS.zip') grid = SGeMSGridReader().apply(filename) grid.plot(categories=True) ################################################################################
def SetUseTab(self, flag): SGeMSGridReader.SetUseTab(self, flag)