Exemple #1
0
    def test_femzip_extended(self):

        self.maxDiff = None

        filepath1 = "test/femzip/d3plot.fz"
        filepath2 = "test/femzip/d3plot"

        d3plot_kwargs_list = [{}, {
            "buffered_reading": True
        }, {
            "state_filter": [0]
        }]

        api = FemzipAPI()
        if not api.has_femunziplib_license():
            return

        D3plot.use_advanced_femzip_api = True

        for d3plot_kwargs in d3plot_kwargs_list:

            d3plot1 = D3plot(filepath1, **d3plot_kwargs)
            d3plot2 = D3plot(filepath2, **d3plot_kwargs)

            hdr_diff, array_diff = d3plot1.compare(d3plot2, array_eps=1E-2)

            self.assertDictEqual(hdr_diff, {})
            self.assertDictEqual(array_diff, {})
    def test_femzip(self):

        self.maxDiff = None

        filepath1 = "test/femzip/d3plot.fz"
        filepath2 = "test/femzip/d3plot"

        d3plot_kwargs_list = [
            {},
            {
                "n_files_to_load_at_once": 1
            },
        ]

        for d3plot_kwargs in d3plot_kwargs_list:

            d3plot1 = D3plot(filepath1, use_femzip=True, **d3plot_kwargs)
            d3plot2 = D3plot(filepath2, **d3plot_kwargs)

            hdr_diff, array_diff = d3plot1.compare(d3plot2, array_eps=1E-2)
            if "use_femzip" in hdr_diff:
                del hdr_diff["use_femzip"]

            self.assertDictEqual(hdr_diff, {})
            self.assertDictEqual(array_diff, {})
Exemple #3
0
    def test_is_end_of_file_marker(self) -> None:

        # -999999. in float32
        bb = BinaryBuffer()
        bb.memoryview = memoryview(struct.pack("<f", -999999.))

        result = D3plot._is_end_of_file_marker(bb, 0, np.float32)
        self.assertEqual(result, True)

        # -999999. in float64
        bb = BinaryBuffer()
        bb.memoryview = memoryview(struct.pack("<d", -999999.))

        result = D3plot._is_end_of_file_marker(bb, 0, np.float64)
        self.assertEqual(result, True)

        # some other number
        bb = BinaryBuffer()
        bb.memoryview = memoryview(struct.pack("<d", -41.))

        result = D3plot._is_end_of_file_marker(bb, 0, np.float64)
        self.assertEqual(result, False)

        # invalid dtype
        with self.assertRaises(ValueError):
            result = D3plot._is_end_of_file_marker(bb, 0, np.int32)
Exemple #4
0
    def test_read_solid_integration_points(self):

        filepath = "test/d3plot_solid_int/d3plot"

        # data from META
        stress_valid = np.array([
            2.132084E+02, 1.792203E+02, 1.397527E+02, 2.307352E+02,
            2.132105E+02, 1.792210E+02, 1.397558E+02, 2.307304E+02
        ])
        pstrain_valid = np.array([
            2.227418E-02,
            2.576126E-03,
            1.909884E-02,
            3.695280E-02,
            2.227416E-02,
            2.576110E-03,
            1.909888E-02,
            3.695256E-02,
        ])
        last_timestep = -1
        first_element = 0
        stress_xx = 0

        d3plot = D3plot(filepath)

        stress = d3plot.arrays[ArrayType.element_solid_stress]
        np.array_equal(stress[last_timestep, first_element, :, stress_xx],
                       stress_valid)

        pstrain = d3plot.arrays[
            ArrayType.element_solid_effective_plastic_strain]
        np.array_equal(pstrain[last_timestep, first_element, :], pstrain_valid)
Exemple #5
0
    def test_beam_integration_points(self):

        self.maxDiff = None

        filepath = "test/d3plot_beamip/d3plot"
        maxmin_test_values = {
            # "element_beam_shear_stress": (-0.007316963, 0.),
            "element_beam_shear_stress": (0., 0.0056635854),
            "element_beam_axial_stress": (-0.007316963, 0.),
            "element_beam_plastic_strain": (0., 0.0056297667),
            "element_beam_axial_strain": (-0.0073745, 0.),
        }

        d3plot = D3plot(filepath)

        for array_name, minmax in maxmin_test_values.items():
            array = d3plot.arrays[array_name]
            self.assertAlmostEqual(array.min(),
                                   minmax[0],
                                   msg="{0}: {1} != {2}".format(
                                       array_name, array.min(), minmax[0]))
            self.assertAlmostEqual(array.max(),
                                   minmax[1],
                                   msg="{0}: {1} != {2}".format(
                                       array_name, array.max(), minmax[1]))
    def test_many_d3plots(self):

        filepath = "test/order_d3plot/d3plot"

        d3plot = D3plot(filepath)

        timesteps = d3plot.arrays[ArrayType.global_timesteps]
        self.assertListEqual(
            timesteps.astype(np.int).tolist(), [1, 2, 10, 11, 12, 22, 100])
Exemple #7
0
    def test_correct_sort_of_more_than_100_state_files(self):

        filepath = "test/order_d3plot/d3plot"

        d3plot = D3plot(filepath)

        timesteps = d3plot.arrays[ArrayType.global_timesteps]
        self.assertListEqual(
            timesteps.astype(int).tolist(), [1, 2, 10, 11, 12, 22, 100])
    def test_part_filter(self):

        self.maxDiff = None

        filepath = "test/simple_d3plot/d3plot"
        part_ids = [1]

        d3plot = D3plot(filepath)
        shell_filter = d3plot.get_part_filter(FilterType.SHELL, part_ids)
        self.assertEqual(shell_filter.sum(), 4696)

        part_filter = d3plot.get_part_filter(FilterType.PART, [1])
        self.assertEqual(part_filter.sum(), 1)
Exemple #9
0
    def test_femzip_basic(self):

        self.maxDiff = None

        filepath1 = "test/femzip/d3plot.fz"
        filepath2 = "test/femzip/d3plot"

        d3plot_kwargs_list = [{}, {
            "buffered_reading": True
        }, {
            "state_filter": [0]
        }]

        D3plot.use_advanced_femzip_api = False

        for d3plot_kwargs in d3plot_kwargs_list:

            d3plot1 = D3plot(filepath1, **d3plot_kwargs)
            d3plot2 = D3plot(filepath2, **d3plot_kwargs)

            hdr_diff, array_diff = d3plot1.compare(d3plot2, array_eps=1E-2)

            self.assertDictEqual(hdr_diff, {})
            self.assertDictEqual(array_diff, {})
Exemple #10
0
    def test_header(self):

        test_header_data = {
            'title': '                                        ',
            'runtime': 1472027823,
            'filetype': 1,
            'source_version': -971095103,
            'release_version': 'R712',
            'version': 960.0,
            'ndim': 3,
            'numnp': 4915,
            'it': 0,
            'iu': 1,
            'iv': 1,
            'ia': 1,
            'nel2': 0,
            'nel4': 4696,
            'nel8': 0,
            'nelth': 0,
            'nel20': 0,
            'nel27': 0,
            'nel48': 0,
            'nv1d': 6,
            'nv2d': 102,
            'nv3d': 32,
            'nv3dt': 90,
            'nummat4': 1,
            'nummat8': 0,
            'nummat2': 0,
            'nummatt': 0,
            'icode': 6,
            'nglbv': 13,
            'numst': 0,
            'numds': 0,
            'neiph': 25,
            'neips': 19,
            'maxint': 3,
            'nmsph': 0,
            'ngpsph': 0,
            'narbs': 9624,
            'ioshl1': 1,
            'ioshl2': 1,
            'ioshl3': 1,
            'ioshl4': 1,
            'ialemat': 0,
            'ncfdv1': 0,
            'ncfdv2': 0,
            'nadapt': 0,
            'nmmat': 1,
            'numfluid': 0,
            'inn': 1,
            'npefg': 0,
            'idtdt': 0,
            'extra': 0,
            'nt3d': 0,
            'neipb': 0,
            'external_numbers_dtype': np.int32,
            'mattyp': 0,
            'has_rigid_road_surface': False,
            'has_rigid_body_data': False,
            'has_temperatures': False,
            'has_mass_scaling': False,
            'has_nel10': False,
            'mdlopt': 2,
            'istrn': 1,
            'has_internal_energy': True,
            'numrbe': 0,
            'num_sph_vars': 0,
            'numbering_header': {
                'nsort': 25894,
                'nsrh': 30809,
                'nsrb': 30809,
                'nsrs': 30809,
                'nsrt': 35505,
                'nsortd': 4915,
                'nsrhd': 0,
                'nsrbd': 0,
                'nsrsd': 4696,
                'nsrtd': 0
            },
            'ntype': [90001, 90000],
            'title2':
            '                                                                        ',
            'n_timesteps': 1
        }

        d3plot = D3plot("test/simple_d3plot/d3plot")
        header = d3plot.header
        self.assertEqual(header["title"], " " * 40)

        for name, value in test_header_data.items():
            self.assertEqual(header[name], value, "Invalid var %s" % name)
Exemple #11
0
    def test_init(self):

        # settings
        self.maxDiff = None

        filepath = "test/simple_d3plot/d3plot"

        geometry_array_shapes = {
            'node_coordinates': (4915, 3),
            'element_solid_part_indexes': (0, ),
            'element_solid_node_indexes': (0, 8),
            'element_tshell_node_indexes': (0, 8),
            'element_tshell_part_indexes': (0, ),
            'element_beam_part_indexes': (0, ),
            'element_beam_node_indexes': (0, 5),
            'element_shell_node_indexes': (4696, 4),
            'element_shell_part_indexes': (4696, ),
            'node_ids': (4915, ),
            'element_solid_ids': (0, ),
            'element_beam_ids': (0, ),
            'element_shell_ids': (4696, ),
            'element_tshell_ids': (0, ),
            'part_titles_ids': (1, ),
            'part_ids': (1, ),
            'part_titles': (1, )
        }

        state_array_shapes = {
            'timesteps': (1, ),
            'global_kinetic_energy': (1, ),
            'global_internal_energy': (1, ),
            'global_total_energy': (1, ),
            'global_velocity': (1, 3),
            'part_internal_energy': (1, 1),
            'part_kinetic_energy': (1, 1),
            'part_velocity': (1, 1, 3),
            'part_mass': (1, 1),
            'part_hourglass_energy': (1, 1),
            'rigid_wall_force': (1, 0),
            'node_displacement': (1, 4915, 3),
            'node_velocity': (1, 4915, 3),
            'node_acceleration': (1, 4915, 3),
            'element_shell_stress': (1, 4696, 3, 6),
            'element_shell_effective_plastic_strain': (1, 4696, 3),
            'element_shell_history_vars': (1, 4696, 3, 19),
            'element_shell_bending_moment': (1, 4696, 3),
            'element_shell_shear_force': (1, 4696, 2),
            'element_shell_normal_force': (1, 4696, 3),
            'element_shell_thickness': (1, 4696),
            'element_shell_unknown_variables': (1, 4696, 2),
            'element_shell_strain': (1, 4696, 2, 6),
            'element_shell_internal_energy': (1, 4696),
            'element_shell_is_alive': (1, 4696)
        }

        all_array_shapes = {**geometry_array_shapes, **state_array_shapes}

        # empty constructor
        D3plot()

        # file thing
        d3plot = D3plot(filepath)
        d3plot_shapes = {
            array_name: array.shape
            for array_name, array in d3plot.arrays.items()
        }
        self.assertDictEqual(d3plot_shapes, all_array_shapes)

        # limited buffer files
        d3plot = D3plot(filepath, n_files_to_load_at_once=1)
        d3plot_shapes = {
            array_name: array.shape
            for array_name, array in d3plot.arrays.items()
        }
        self.assertDictEqual(d3plot_shapes, all_array_shapes)

        # test loading single state arrays
        for array_name, array_shape in state_array_shapes.items():
            d3plot = D3plot(filepath, state_array_filter=[array_name])
            d3plot_shapes = {
                array_name: array.shape
                for array_name, array in d3plot.arrays.items()
            }
            self.assertDictEqual(
                d3plot_shapes, {
                    **geometry_array_shapes, array_name: array_shape
                })
Exemple #12
0
    def test_header(self):

        test_header_data = {
            'title': '                                    ',
            'runtime': 1472027823,
            'filetype': 1,
            'source_version': -971095103,
            'release_version': 'R712',
            'version': 960.0,
            'ndim': 4,
            'numnp': 4915,
            'it': 0,
            'iu': 1,
            'iv': 1,
            'ia': 1,
            'nel2': 0,
            'nel4': 4696,
            'nel8': 0,
            'nelt': 0,
            'nel20': 0,
            'nel27': 0,
            'nel48': 0,
            'nv1d': 6,
            'nv2d': 102,
            'nv3d': 32,
            'nv3dt': 90,
            'nummat4': 1,
            'nummat8': 0,
            'nummat2': 0,
            'nummatt': 0,
            'icode': 6,
            'nglbv': 13,
            'numst': 0,
            'numds': 0,
            'neiph': 25,
            'neips': 19,
            'maxint': -10003,
            'nmsph': 0,
            'ngpsph': 0,
            'narbs': 9624,
            'ioshl1': 1000,
            'ioshl2': 1000,
            'ioshl3': 1000,
            'ioshl4': 1000,
            'ialemat': 0,
            'ncfdv1': 0,
            'ncfdv2': 0,
            'nadapt': 0,
            'nmmat': 1,
            'numfluid': 0,
            'inn': 1,
            'npefg': 0,
            'idtdt': 0,
            'extra': 0,
            'nt3d': 0,
            'neipb': 0,
        }

        d3plot = D3plot("test/simple_d3plot/d3plot")
        header = d3plot.header

        for name, value in test_header_data.items():
            self.assertEqual(header.raw_header[name], value,
                             "Invalid var %s" % name)