Esempio n. 1
0
    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
Esempio n. 2
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()
Esempio n. 3
0
    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()
Esempio n. 4
0
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
Esempio n. 5
0
    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()
Esempio n. 6
0
    def filename(self, filename):
        """

        Parameters
        ----------
        filename : str
            Set a new filename
        Returns
        -------
        None
        """
        self._filename = filename
        check_dir(filename)
Esempio n. 7
0
    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))
Esempio n. 8
0
    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)