def __init__(self, filename, path_to_table, tablename='odesolution', buffer_size=10): """ Constructor for HDF5 Result Parameters ---------- filename : str Path to file where the HDF5-File shall be stored path_to_table : str internal hdf5 path to the table where the results shall be stored inside the HDF5 structure tablename : str name of the table where the results shall be stored inside the HDF5 structure (default: odesolution) buffer_size : int number of slots in the RAM buffer until the writer is forced to write from disk to RAM (default: 10) Attention: It is possible that the buffer is written to disk before this boundary is reached. But it is never written later. """ super().__init__() self._filename = filename self._path_to_table = path_to_table self._tablename = tablename check_dir(filename) self._fp = None self._is_allocated = False self._tabledict = {'t': Float64Col()} self._wp = None self._table = None self._buffer_size = buffer_size self._iteration = 0
def test_dummy_to_vtk_wrong_fileextension(self): self.set_dummy_input() filename = amfe_dir('results/.tests/vtk_dummy.abc') check_dir(filename) converter = VtkMeshConverter(filename=filename) # Build nodes self.run_build_commands(converter) converter.return_mesh()
def test_dummy_to_vtk(self): self.set_dummy_input() filename = amfe_dir('results/.tests/vtk_dummy.vtk') check_dir(filename) converter = VtkMeshConverter(filename=filename) # Run build commands self.run_build_commands(converter) converter.return_mesh()
def clean_test_outputs(): directory = amfe_dir('results/.tests/') check_dir(directory + 'test.txt') directory = amfe_dir('results/.tests/') for f in os.listdir(directory): if f == 'hdf5_dummy.hdf5' or f == 'hdf5postprocessing.hdf5': return filename = directory + f if os.path.isfile(filename): os.remove(filename) return
def test_dummy_to_vtk_with_preallocation_too_late(self): self.set_dummy_input() filename = amfe_dir('results/.tests/vtk_dummy.vtk') check_dir(filename) converter = VtkMeshConverter(filename=filename) # Build nodes self.run_build_commands(converter) converter.build_no_of_nodes(len(self.nodes_input)) converter.build_no_of_elements(len(self.elements_input)) converter.return_mesh()
def filename(self, filename): """ Parameters ---------- filename : str Set a new filename Returns ------- None """ self._filename = filename check_dir(filename)
def test_async_solve(self): # Test Asnychronous solution filename = amfe_dir('results/tests/amfe_solution_async_hdf5.h5') check_dir(filename) mysolver = DummySolver() t0 = 0.0 tend = 1.0 dt = 0.1 # define task for asyncio async def task(tfilename, tsolver, tt0, ttend, tdt): no_of_buffer_slots = 3 print("Run Asynchronous HDF5 Version") h5amfe = AmfeSolutionHdf5(tfilename, 'Sim1', 'asyncsolution') with h5amfe as writer: solverkwargs = {'t0': tt0, 'tend': ttend, 'dt': tdt} await solve_async(no_of_buffer_slots, writer, tsolver, **solverkwargs) return h5amfe # Run asynchronous _ = asyncio.run(task(filename, mysolver, t0, tend, dt)) # Test if results have been written into hdf5 correctly with h5py.File(filename, mode='r') as fp: # Get the desired results from solver t, q, dq, ddq, strains, stresses = mysolver._initialize(t0, tend, dt, mysolver.ndof) # Get dataset dataset = fp['Sim1/asyncsolution'] # Test if the first two entries are correct assert_array_equal(dataset[0]['q'], q[0, :]) assert_array_equal(dataset[1]['q'], q[1, :]) assert_array_equal(dataset[0]['dq'], dq[0, :]) assert_array_equal(dataset[1]['dq'], dq[1, :]) assert_array_equal(dataset[0]['ddq'], ddq[0, :]) assert_array_equal(dataset[1]['ddq'], ddq[1, :]) assert_array_equal(dataset[0]['strain'], strains[0, :, :]) assert_array_equal(dataset[1]['strain'], strains[1, :, :]) assert_array_equal(dataset[0]['stress'], stresses[0, :, :]) assert_array_equal(dataset[1]['stress'], stresses[1, :, :]) self.assertEqual(dataset[0]['t'], t[0]) self.assertEqual(dataset[1]['t'], t[1]) # test if all entries have been written self.assertEqual(len(dataset), len(t))
def test_write_hdf5_timesteps(self): filename = amfe_dir('results/tests/amfe_solution_hdf5.h5') check_dir(filename) q1 = np.arange(0, 60, dtype=float) q2 = np.arange(10, 70, dtype=float) dq1 = np.arange(20, 80, dtype=float) dq2 = np.arange(30, 90, dtype=float) ddq1 = np.arange(40, 100, dtype=float) ddq2 = np.arange(50, 110, dtype=float) strains1 = np.random.rand(60, 6) strains2 = np.random.rand(60, 6) stresses1 = np.random.rand(60, 6) stresses2 = np.random.rand(60, 6) t1 = 0.1 t2 = 0.5 # Only q h5amfe = AmfeSolutionHdf5(filename, 'Sim1', tablename='testcase') with h5amfe as writer: # Only q writer.write_timestep(t1, q1) writer.write_timestep(t2, q2) with h5py.File(filename, mode='r') as fp: dataset = fp['Sim1/testcase'] assert_array_equal(dataset[0]['q'], q1) assert_array_equal(dataset[1]['q'], q2) self.assertEqual(dataset[0]['t'], t1) self.assertEqual(dataset[1]['t'], t2) self.assertEqual(len(dataset), 2) # Only q and dq h5amfe = AmfeSolutionHdf5(filename, 'Sim1', tablename='testcase') with h5amfe as writer: # Only q and dq writer.write_timestep(t1, q1, dq1) writer.write_timestep(t2, q2, dq2) with h5py.File(filename, mode='r') as fp: dataset = fp['Sim1/testcase'] assert_array_equal(dataset[0]['q'], q1) assert_array_equal(dataset[1]['q'], q2) assert_array_equal(dataset[0]['dq'], dq1) assert_array_equal(dataset[1]['dq'], dq2) self.assertEqual(dataset[0]['t'], t1) self.assertEqual(dataset[1]['t'], t2) self.assertEqual(len(dataset), 2) # q, dq and ddq h5amfe = AmfeSolutionHdf5(filename, 'Sim1', tablename='testcase') with h5amfe as writer: # q, dq and ddq writer.write_timestep(t1, q1, dq1, ddq1) writer.write_timestep(t2, q2, dq2, ddq2) with h5py.File(filename, mode='r') as fp: dataset = fp['Sim1/testcase'] assert_array_equal(dataset[0]['q'], q1) assert_array_equal(dataset[1]['q'], q2) assert_array_equal(dataset[0]['dq'], dq1) assert_array_equal(dataset[1]['dq'], dq2) assert_array_equal(dataset[0]['ddq'], ddq1) assert_array_equal(dataset[1]['ddq'], ddq2) self.assertEqual(dataset[0]['t'], t1) self.assertEqual(dataset[1]['t'], t2) self.assertEqual(len(dataset), 2) # only q and ddq h5amfe = AmfeSolutionHdf5(filename, 'Sim1', tablename='testcase') with h5amfe as writer: # only q and ddq writer.write_timestep(t1, q1, ddq=ddq1) writer.write_timestep(t2, q2, ddq=ddq2) with h5py.File(filename, mode='r') as fp: dataset = fp['Sim1/testcase'] assert_array_equal(dataset[0]['q'], q1) assert_array_equal(dataset[1]['q'], q2) assert_array_equal(dataset[0]['ddq'], ddq1) assert_array_equal(dataset[1]['ddq'], ddq2) self.assertEqual(dataset[0]['t'], t1) self.assertEqual(dataset[1]['t'], t2) self.assertEqual(len(dataset), 2) # only q and strain h5amfe = AmfeSolutionHdf5(filename, 'Sim1', tablename='testcase') with h5amfe as writer: # Only q and strain writer.write_timestep(t1, q1, strain=strains1) writer.write_timestep(t2, q2, strain=strains2) with h5py.File(filename, mode='r') as fp: dataset = fp['Sim1/testcase'] assert_array_equal(dataset[0]['q'], q1) assert_array_equal(dataset[1]['q'], q2) assert_array_equal(dataset[0]['strain'], strains1) assert_array_equal(dataset[1]['strain'], strains2) self.assertEqual(dataset[0]['t'], t1) self.assertEqual(dataset[1]['t'], t2) self.assertEqual(len(dataset), 2) # only q and stress h5amfe = AmfeSolutionHdf5(filename, 'Sim1', tablename='testcase') with h5amfe as writer: # Only q and stress writer.write_timestep(t1, q1, stress=stresses1) writer.write_timestep(t2, q2, stress=stresses2) with h5py.File(filename, mode='r') as fp: dataset = fp['Sim1/testcase'] assert_array_equal(dataset[0]['q'], q1) assert_array_equal(dataset[1]['q'], q2) assert_array_equal(dataset[0]['stress'], stresses1) assert_array_equal(dataset[1]['stress'], stresses2) self.assertEqual(dataset[0]['t'], t1) self.assertEqual(dataset[1]['t'], t2) self.assertEqual(len(dataset), 2) # only q, dq, strain and stress h5amfe = AmfeSolutionHdf5(filename, 'Sim1', tablename='testcase') with h5amfe as writer: # Only q, dq, strain and stress writer.write_timestep(t1, q1, dq1, strain=strains1, stress=stresses1) writer.write_timestep(t2, q2, dq2, strain=strains2, stress=stresses2) with h5py.File(filename, mode='r') as fp: dataset = fp['Sim1/testcase'] assert_array_equal(dataset[0]['q'], q1) assert_array_equal(dataset[1]['q'], q2) assert_array_equal(dataset[0]['dq'], dq1) assert_array_equal(dataset[1]['dq'], dq2) assert_array_equal(dataset[0]['strain'], strains1) assert_array_equal(dataset[1]['strain'], strains2) assert_array_equal(dataset[0]['stress'], stresses1) assert_array_equal(dataset[1]['stress'], stresses2) self.assertEqual(dataset[0]['t'], t1) self.assertEqual(dataset[1]['t'], t2) self.assertEqual(len(dataset), 2) # q, dq, ddq, strain and stress h5amfe = AmfeSolutionHdf5(filename, 'Sim1', tablename='testcase') with h5amfe as writer: # q, dq, ddq, strain and stress writer.write_timestep(t1, q1, dq1, ddq1, strains1, stresses1) writer.write_timestep(t2, q2, dq2, ddq2, strains2, stresses2) with h5py.File(filename, mode='r') as fp: dataset = fp['Sim1/testcase'] assert_array_equal(dataset[0]['q'], q1) assert_array_equal(dataset[1]['q'], q2) assert_array_equal(dataset[0]['dq'], dq1) assert_array_equal(dataset[1]['dq'], dq2) assert_array_equal(dataset[0]['ddq'], ddq1) assert_array_equal(dataset[1]['ddq'], ddq2) assert_array_equal(dataset[0]['strain'], strains1) assert_array_equal(dataset[1]['strain'], strains2) assert_array_equal(dataset[0]['stress'], stresses1) assert_array_equal(dataset[1]['stress'], stresses2) self.assertEqual(dataset[0]['t'], t1) self.assertEqual(dataset[1]['t'], t2) self.assertEqual(len(dataset), 2)