예제 #1
0
    def test_coordinate_systems(self):
        logging.debug('')
        logging.debug('test_coordinate_systems')

        logger = logging.getLogger()
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)

        domain = wedge.copy()
        domain.make_left_handed()
        tmp = wedge.xyzzy.grid_coordinates.z * -1.
        self.assertTrue((domain.xyzzy.grid_coordinates.z == tmp).all())
        self.assertFalse(domain.is_equivalent(wedge, logger))

        domain.make_right_handed()
        self.assertTrue(domain.is_equivalent(wedge, logger))

        cyl = wedge.copy()
        cyl.make_cylindrical()

        cart = cyl.copy()
        cart.make_cartesian()
        self.assertTrue(cart.is_equivalent(wedge, tolerance=0.000001))

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30., 'x')

        cyl = wedge.copy()
        cyl.make_cylindrical('x')

        cart = cyl.copy()
        cart.make_cartesian('x')
        self.assertTrue(cart.is_equivalent(wedge, tolerance=0.000001))
예제 #2
0
    def test_coordinate_systems(self):
        logging.debug('')
        logging.debug('test_coordinate_systems')

        logger = logging.getLogger()
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)

        domain = wedge.copy()
        domain.make_left_handed()
        tmp = wedge.xyzzy.grid_coordinates.z * -1.
        self.assertTrue((domain.xyzzy.grid_coordinates.z == tmp).all())
        self.assertFalse(domain.is_equivalent(wedge, logger))

        domain.make_right_handed()
        self.assertTrue(domain.is_equivalent(wedge, logger))

        cyl = wedge.copy()
        cyl.make_cylindrical()

        cart = cyl.copy()
        cart.make_cartesian()
        self.assertTrue(cart.is_equivalent(wedge, tolerance=0.000001))

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30., 'x')

        cyl = wedge.copy()
        cyl.make_cylindrical('x')

        cart = cyl.copy()
        cart.make_cartesian('x')
        self.assertTrue(cart.is_equivalent(wedge, tolerance=0.000001))
예제 #3
0
    def test_q_3d(self):
        logging.debug('')
        logging.debug('test_q_3d')

        logger = logging.getLogger()
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)

        # Big-endian binary.
        write_plot3d_q(wedge, 'be-binary.xyz', 'be-binary.q', logger=logger,
                       big_endian=True, unformatted=False)
        domain = read_plot3d_q('be-binary.xyz', 'be-binary.q', logger=logger,
                               multiblock=False, big_endian=True,
                               unformatted=False)
        self.assertFalse(domain.is_equivalent(wedge, logger=logger))
        domain.rename_zone('xyzzy', domain.zone_1)
        self.assertTrue(domain.is_equivalent(wedge, logger=logger))

        # Little-endian unformatted.
        write_plot3d_q(domain, 'unformatted.xyz', 'unformatted.q',
                       logger=logger)
        domain = read_plot3d_q('unformatted.xyz', 'unformatted.q',
                               logger=logger, multiblock=False)
        self.assertFalse(domain.is_equivalent(wedge, logger=logger))
        domain.rename_zone('xyzzy', domain.zone_1)
        self.assertTrue(domain.is_equivalent(wedge, logger=logger))

        # Multiblock.
        wedge2 = create_wedge_3d((29, 19, 9), 5., 2.5, 4., 30.)
        domain.add_domain(wedge2)
        write_plot3d_q(domain, 'unformatted.xyz', 'unformatted.q',
                       logger=logger)
        domain = read_plot3d_q('unformatted.xyz', 'unformatted.q',
                               logger=logger)

        shape = read_plot3d_shape('unformatted.xyz', logger=logger)
        self.assertEqual(shape, [(30, 20, 10), (29, 19, 9)])

        # Errors.
        try:
            read_plot3d_q('unformatted.xyz', 'unformatted.q', blanking=True,
                          logger=logger, multiblock=False)
        except NotImplementedError as exc:
            self.assertEqual(str(exc), 'blanking not supported yet')
        else:
            self.fail('Expected NotImplementedError')

        try:
            read_plot3d_q('unformatted.xyz', 'unformatted.q', planes=True,
                          logger=logger, multiblock=False)
        except NotImplementedError as exc:
            self.assertEqual(str(exc), 'planar format not supported yet')
        else:
            self.fail('Expected NotImplementedError')
예제 #4
0
    def test_f_3d(self):
        logging.debug('')
        logging.debug('test_f_3d')

        logger = logging.getLogger()
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        wedge_flow = wedge.xyzzy.flow_solution
        varnames = ('density', 'momentum', 'energy_stagnation_density')

        # Big-endian binary.
        write_plot3d_f(wedge, 'be-binary.xyz', 'be-binary.f', varnames,
                       logger=logger, big_endian=True, unformatted=False)
        domain = read_plot3d_f('be-binary.xyz', 'be-binary.f', logger=logger,
                               multiblock=False, big_endian=True,
                               unformatted=False)
        test_flow = domain.zone_1.flow_solution
        self.assertTrue((test_flow.f_1 == wedge_flow.density).all())
        self.assertTrue((test_flow.f_2 == wedge_flow.momentum.x).all())
        self.assertTrue((test_flow.f_3 == wedge_flow.momentum.y).all())
        self.assertTrue((test_flow.f_4 == wedge_flow.momentum.z).all())
        self.assertTrue((test_flow.f_5 == wedge_flow.energy_stagnation_density).all())

        # Little-endian unformatted.
        write_plot3d_f(domain, 'unformatted.xyz', 'unformatted.f',
                       logger=logger)
        domain = read_plot3d_f('unformatted.xyz', 'unformatted.f',
                               logger=logger, multiblock=False)
        test_flow = domain.zone_1.flow_solution
        self.assertTrue((test_flow.f_1 == wedge_flow.density).all())
        self.assertTrue((test_flow.f_2 == wedge_flow.momentum.x).all())
        self.assertTrue((test_flow.f_3 == wedge_flow.momentum.y).all())
        self.assertTrue((test_flow.f_4 == wedge_flow.momentum.z).all())
        self.assertTrue((test_flow.f_5 == wedge_flow.energy_stagnation_density).all())
예제 #5
0
    def test_zone(self):
        logging.debug('')
        logging.debug('test_zone')

        logger = logging.getLogger()

        zone = Zone()
        self.assertEqual(zone.reference_state, None)
        self.assertEqual(zone.coordinate_system, 'Cartesian')
        self.assertEqual(zone.right_handed, True)
        self.assertEqual(zone.symmetry, None)
        self.assertEqual(zone.symmetry_axis, None)
        self.assertEqual(zone.symmetry_instances, 1)
        self.assertEqual(zone.shape, ())
        self.assertEqual(zone.extent, ())

        self.assertFalse(zone.is_equivalent([], logger))

        assert_raises(self,
                      "zone.coordinate_system = 'pluto'",
                      globals(),
                      locals(),
                      ValueError,
                      "invalid coordinate system 'pluto'",
                      use_exec=True)

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        domain = wedge.copy()

        domain.xyzzy.symmetry_instances = 5
        self.assertFalse(domain.is_equivalent(wedge))

        domain.xyzzy.symmetry_axis = 'x'
        self.assertFalse(domain.is_equivalent(wedge))

        domain.xyzzy.symmetry = 'rotational'
        self.assertFalse(domain.is_equivalent(wedge))

        domain.make_cylindrical()
        self.assertFalse(domain.is_equivalent(wedge))
        assert_raises(self, 'domain.translate(0., 0., 0.)', globals(),
                      locals(), RuntimeError,
                      'Zone not in cartesian coordinates')
        assert_raises(self, 'domain.rotate_about_x(0.)', globals(), locals(),
                      RuntimeError, 'Zone not in cartesian coordinates')
        assert_raises(self, 'domain.rotate_about_y(0.)', globals(), locals(),
                      RuntimeError, 'Zone not in cartesian coordinates')
        assert_raises(self, 'domain.rotate_about_z(0.)', globals(), locals(),
                      RuntimeError, 'Zone not in cartesian coordinates')
예제 #6
0
    def test_f_3d(self):
        logging.debug('')
        logging.debug('test_f_3d')

        logger = logging.getLogger()
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        wedge_flow = wedge.xyzzy.flow_solution
        varnames = ('density', 'momentum', 'energy_stagnation_density')

        # Big-endian binary.
        write_plot3d_f(wedge,
                       'be-binary.xyz',
                       'be-binary.f',
                       varnames,
                       logger=logger,
                       big_endian=True,
                       unformatted=False)
        domain = read_plot3d_f('be-binary.xyz',
                               'be-binary.f',
                               logger=logger,
                               multiblock=False,
                               big_endian=True,
                               unformatted=False)
        test_flow = domain.zone_1.flow_solution
        self.assertTrue((test_flow.f_1 == wedge_flow.density).all())
        self.assertTrue((test_flow.f_2 == wedge_flow.momentum.x).all())
        self.assertTrue((test_flow.f_3 == wedge_flow.momentum.y).all())
        self.assertTrue((test_flow.f_4 == wedge_flow.momentum.z).all())
        self.assertTrue(
            (test_flow.f_5 == wedge_flow.energy_stagnation_density).all())

        # Little-endian unformatted.
        write_plot3d_f(domain,
                       'unformatted.xyz',
                       'unformatted.f',
                       logger=logger)
        domain = read_plot3d_f('unformatted.xyz',
                               'unformatted.f',
                               logger=logger,
                               multiblock=False)
        test_flow = domain.zone_1.flow_solution
        self.assertTrue((test_flow.f_1 == wedge_flow.density).all())
        self.assertTrue((test_flow.f_2 == wedge_flow.momentum.x).all())
        self.assertTrue((test_flow.f_3 == wedge_flow.momentum.y).all())
        self.assertTrue((test_flow.f_4 == wedge_flow.momentum.z).all())
        self.assertTrue(
            (test_flow.f_5 == wedge_flow.energy_stagnation_density).all())
예제 #7
0
    def test_grid(self):
        logging.debug('')
        logging.debug('test_grid')

        logger = logging.getLogger()

        grid = GridCoordinates()
        self.assertEqual(grid.shape, ())
        self.assertEqual(grid.extent, ())
        self.assertEqual(grid.ghosts, [0, 0, 0, 0, 0, 0])

        self.assertFalse(grid.is_equivalent([], logger))

        other = GridCoordinates()
        self.assertTrue(grid.is_equivalent(other, logger))
        other.ghosts = [1, 1, 1, 1, 1, 1]
        self.assertFalse(grid.is_equivalent(other, logger))

        assert_raises(self, 'grid.ghosts = []', globals(), locals(),
                      ValueError, 'ghosts must be a 6-element array',
                      use_exec=True)

        assert_raises(self, 'grid.ghosts = [0, 1, 2, 3, 4, -5]',
                      globals(), locals(), ValueError,
                      'All ghost values must be >= 0', use_exec=True)

        assert_raises(self, 'grid.translate(1., 0., 0.)',
                      globals(), locals(), AttributeError, 'no X coordinates')

        assert_raises(self, 'grid.translate(0., 1., 0.)',
                      globals(), locals(), AttributeError, 'no Y coordinates')

        assert_raises(self, 'grid.translate(0., 0., 1.)',
                      globals(), locals(), AttributeError, 'no Z coordinates')

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        assert_raises(self,
                      "wedge.xyzzy.grid_coordinates.make_cylindrical(axis='q')",
                      globals(), locals(), ValueError,
                      "axis must be 'z' or 'x'")
        wedge.xyzzy.grid_coordinates.make_cylindrical(axis='z')
        assert_raises(self,
                      "wedge.xyzzy.grid_coordinates.make_cartesian(axis='q')",
                      globals(), locals(), ValueError,
                      "axis must be 'z' or 'x'")
        wedge.xyzzy.grid_coordinates.make_cartesian(axis='z')
예제 #8
0
    def test_zone(self):
        logging.debug('')
        logging.debug('test_zone')

        logger = logging.getLogger()

        zone = Zone()
        self.assertEqual(zone.reference_state, None)
        self.assertEqual(zone.coordinate_system, 'Cartesian')
        self.assertEqual(zone.right_handed, True)
        self.assertEqual(zone.symmetry, None)
        self.assertEqual(zone.symmetry_axis, None)
        self.assertEqual(zone.symmetry_instances, 1)
        self.assertEqual(zone.shape, ())
        self.assertEqual(zone.extent, ())

        self.assertFalse(zone.is_equivalent([], logger))

        assert_raises(self, "zone.coordinate_system = 'pluto'",
                      globals(), locals(), ValueError,
                      "invalid coordinate system 'pluto'", use_exec=True)

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        domain = wedge.copy()

        domain.xyzzy.symmetry_instances = 5
        self.assertFalse(domain.is_equivalent(wedge))

        domain.xyzzy.symmetry_axis = 'x'
        self.assertFalse(domain.is_equivalent(wedge))

        domain.xyzzy.symmetry = 'rotational'
        self.assertFalse(domain.is_equivalent(wedge))

        domain.make_cylindrical()
        self.assertFalse(domain.is_equivalent(wedge))
        assert_raises(self, 'domain.translate(0., 0., 0.)', globals(), locals(),
                      RuntimeError, 'Zone not in cartesian coordinates')
        assert_raises(self, 'domain.rotate_about_x(0.)', globals(), locals(),
                      RuntimeError, 'Zone not in cartesian coordinates')
        assert_raises(self, 'domain.rotate_about_y(0.)', globals(), locals(),
                      RuntimeError, 'Zone not in cartesian coordinates')
        assert_raises(self, 'domain.rotate_about_z(0.)', globals(), locals(),
                      RuntimeError, 'Zone not in cartesian coordinates')
예제 #9
0
    def test_wedge(self):
        logging.debug('')
        logging.debug('test_wedge')

        wedge = create_wedge_3d((30, 20, 100), 5., 0.5, 2., 30.)

        # I face.
        regions = (('xyzzy', 2, 2, 0, -1, 0, -1),)
        variables = (('area', 'inch**2'),)
        metrics = mesh_probe(wedge, regions, variables)
        area = metrics[0]
        expected = (((pi*2.**2.) - (pi*0.5**2.)) * 30./360.) * 144.
        logging.debug('area = %g (%g ft**2), expected %g',
                      area, area / 144., expected)
        assert_rel_error(self, area, expected, 0.00001)

        # J face.
        regions = (('xyzzy', 0, -1, 0, 0, 0, -1),)
        variables = (('area', 'inch**2'),)
        metrics = mesh_probe(wedge, regions, variables)
        area = metrics[0]
        expected = (2.*pi*0.5 * 30./360.) * 5. * 144.
        logging.debug('area = %g (%g ft**2), expected %g',
                      area, area / 144., expected)
        assert_rel_error(self, area, expected, 0.00001)

        regions = (('xyzzy', 0, -1, -1, -1, 0, -1),)
        variables = (('area', 'inch**2'),)
        metrics = mesh_probe(wedge, regions, variables)
        area = metrics[0]
        expected = (2.* pi*2. * 30./360.) * 5. * 144.
        logging.debug('area = %g (%g ft**2), expected %g',
                      area, area / 144., expected)
        assert_rel_error(self, area, expected, 0.00001)

        # K face.
        regions = (('xyzzy', 0, -1, 0, -1, 2, 2),)
        variables = (('area', 'inch**2'),)
        metrics = mesh_probe(wedge, regions, variables)
        area = metrics[0]
        expected = 5. * (2. - 0.5) * 144.
        logging.debug('area = %g (%g ft**2), expected %g',
                      area, area / 144., expected)
        assert_rel_error(self, area, expected, 0.000001)
예제 #10
0
    def test_wedge(self):
        logging.debug("")
        logging.debug("test_wedge")

        wedge = create_wedge_3d((30, 20, 100), 5.0, 0.5, 2.0, 30.0)

        # I face.
        surfaces = (("xyzzy", 2, 2, 0, -1, 0, -1),)
        variables = (("area", "inch**2"),)
        metrics = surface_probe(wedge, surfaces, variables)
        area = metrics[0]
        expected = (((pi * 2.0 ** 2.0) - (pi * 0.5 ** 2.0)) * 30.0 / 360.0) * 144.0
        logging.debug("area = %g (%g ft), expected %g", area, area / 144.0, expected)
        assert_rel_error(self, area, expected, 0.00001)

        # J face.
        surfaces = (("xyzzy", 0, -1, 0, 0, 0, -1),)
        variables = (("area", "inch**2"),)
        metrics = surface_probe(wedge, surfaces, variables)
        area = metrics[0]
        expected = (2.0 * pi * 0.5 * 30.0 / 360.0) * 5.0 * 144.0
        logging.debug("area = %g (%g ft), expected %g", area, area / 144.0, expected)
        assert_rel_error(self, area, expected, 0.00001)

        surfaces = (("xyzzy", 0, -1, -1, -1, 0, -1),)
        variables = (("area", "inch**2"),)
        metrics = surface_probe(wedge, surfaces, variables)
        area = metrics[0]
        expected = (2.0 * pi * 2.0 * 30.0 / 360.0) * 5.0 * 144.0
        logging.debug("area = %g (%g ft), expected %g", area, area / 144.0, expected)
        assert_rel_error(self, area, expected, 0.00001)

        # K face.
        surfaces = (("xyzzy", 0, -1, 0, -1, 2, 2),)
        variables = (("area", "inch**2"),)
        metrics = surface_probe(wedge, surfaces, variables)
        area = metrics[0]
        expected = 5.0 * (2.0 - 0.5) * 144.0
        logging.debug("area = %g (%g ft), expected %g", area, area / 144.0, expected)
        assert_rel_error(self, area, expected, 0.000001)
예제 #11
0
    def test_promote(self):
        logging.debug('')
        logging.debug('test_promote')
        logger = logging.getLogger()

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        self.assertEqual(wedge.shape, [(30, 20)])
        wedge.promote()
        self.assertEqual(wedge.shape, [(30, 20, 1)])

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        wedge.make_cylindrical()
        self.assertEqual(wedge.shape, [(30, 20)])
        wedge.promote()
        self.assertEqual(wedge.shape, [(1, 30, 20)])

        curve = create_curve_2d(20, 0.5, 30.)
        self.assertEqual(curve.shape, [(20,)])
        curve.promote()
        self.assertEqual(curve.shape, [(20,1)])

        curve = create_curve_2d(20, 0.5, 30.)
        curve.make_cylindrical()
        self.assertEqual(curve.shape, [(20,)])
        curve.promote()
        self.assertEqual(curve.shape, [(20,1)])

        assert_raises(self, 'FlowSolution().promote()', globals(), locals(),
                      RuntimeError, 'FlowSolution is empty!')
        assert_raises(self, 'Vector().promote()', globals(), locals(),
                      RuntimeError, 'Vector is empty!')

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        assert_raises(self, 'wedge.xyzzy.flow_solution.promote()',
                      globals(), locals(),
                      RuntimeError, 'FlowSolution is 3D')
        assert_raises(self, 'wedge.xyzzy.grid_coordinates.promote()',
                      globals(), locals(),
                      RuntimeError, 'Vector is 3D')
예제 #12
0
    def test_promote(self):
        logging.debug('')
        logging.debug('test_promote')
        logger = logging.getLogger()

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        self.assertEqual(wedge.shape, [(30, 20)])
        wedge.promote()
        self.assertEqual(wedge.shape, [(30, 20, 1)])

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        wedge.make_cylindrical()
        self.assertEqual(wedge.shape, [(30, 20)])
        wedge.promote()
        self.assertEqual(wedge.shape, [(1, 30, 20)])

        curve = create_curve_2d(20, 0.5, 30.)
        self.assertEqual(curve.shape, [(20, )])
        curve.promote()
        self.assertEqual(curve.shape, [(20, 1)])

        curve = create_curve_2d(20, 0.5, 30.)
        curve.make_cylindrical()
        self.assertEqual(curve.shape, [(20, )])
        curve.promote()
        self.assertEqual(curve.shape, [(20, 1)])

        assert_raises(self, 'FlowSolution().promote()', globals(), locals(),
                      RuntimeError, 'FlowSolution is empty!')
        assert_raises(self, 'Vector().promote()', globals(), locals(),
                      RuntimeError, 'Vector is empty!')

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        assert_raises(self, 'wedge.xyzzy.flow_solution.promote()', globals(),
                      locals(), RuntimeError, 'FlowSolution is 3D')
        assert_raises(self, 'wedge.xyzzy.grid_coordinates.promote()',
                      globals(), locals(), RuntimeError, 'Vector is 3D')
예제 #13
0
    def test_errors(self):
        logging.debug("")
        logging.debug("test_errors")

        wedge = create_wedge_3d((30, 20, 100), 5.0, 0.5, 2.0, 30.0)

        surfaces = (("no-such-zone", 2, 2, 0, -1, 0, -1),)
        variables = (("area", "inch**2"),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            ValueError,
            "Domain does not contain zone 'no-such-zone'",
        )

        surfaces = (("xyzzy", -200, 2, 0, -1, 0, -1),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            ValueError,
            "Zone xyzzy imin -170 invalid (max 30)",
        )

        surfaces = (("xyzzy", 2, 200, 0, -1, 0, -1),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            ValueError,
            "Zone xyzzy imax 200 invalid (max 30)",
        )

        surfaces = (("xyzzy", 2, 2, -200, -1, 0, -1),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            ValueError,
            "Zone xyzzy jmin -180 invalid (max 20)",
        )

        surfaces = (("xyzzy", 2, 2, 0, 200, 0, -1),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            ValueError,
            "Zone xyzzy jmax 200 invalid (max 20)",
        )

        surfaces = (("xyzzy", 2, 2, 0, -1, -200, -1),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            ValueError,
            "Zone xyzzy kmin -100 invalid (max 100)",
        )

        surfaces = (("xyzzy", 2, 2, 0, -1, 0, 200),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            ValueError,
            "Zone xyzzy kmax 200 invalid (max 100)",
        )

        surfaces = (("xyzzy", 0, -1, 0, -1, 0, -1),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            ValueError,
            "Zone xyzzy volume specified: 0,29 0,1",
        )

        surfaces = (("xyzzy", 2, 2, 0, -1, 0, -1),)
        variables = (("no-such-variable", "inch**2"),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            ValueError,
            "Unknown/unsupported variable 'no-such-variable'",
        )

        variables = (("area", "inch**2"),)
        assert_raises(
            self,
            'surface_probe(wedge, surfaces, variables, "mass")',
            globals(),
            locals(),
            NotImplementedError,
            "Zone solution location Vertex not supported",
        )
        surfaces = (("xyzzy", 0, -1, 2, 2, 0, -1),)
        assert_raises(
            self,
            'surface_probe(wedge, surfaces, variables, "mass")',
            globals(),
            locals(),
            NotImplementedError,
            "Zone solution location Vertex not supported",
        )
        surfaces = (("xyzzy", 0, -1, 0, -1, 2, 2),)
        assert_raises(
            self,
            'surface_probe(wedge, surfaces, variables, "mass")',
            globals(),
            locals(),
            NotImplementedError,
            "Zone solution location Vertex not supported",
        )

        surfaces = (("xyzzy", 2, 2, 0, -1, 0, -1),)
        assert_raises(
            self,
            'surface_probe(wedge, surfaces, variables, "scheme")',
            globals(),
            locals(),
            ValueError,
            "Unknown/unsupported weighting scheme 'scheme'",
        )

        ref = wedge.reference_state
        wedge.reference_state = None
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            ValueError,
            "No zone or domain reference_state dictionary supplied" " for xyzzy.",
        )

        wedge.reference_state = {"dummy": 42}
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            AttributeError,
            "For area," " reference_state is missing 'length_reference'.",
        )

        variables = (("mass_flow", "lbm/s"),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            AttributeError,
            "For mass flow,"
            " reference_state is missing one or more of"
            " ('length_reference', 'pressure_reference',"
            " 'ideal_gas_constant', 'temperature_reference').",
        )

        variables = (("corrected_mass_flow", "lbm/s"),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            AttributeError,
            "For corrected mass" " flow, zone xyzzy is missing one or more of" " ('density', 'momentum', 'pressure').",
        )

        variables = (("pressure", "psi"),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            AttributeError,
            "For static" " pressure, zone xyzzy is missing 'pressure'.",
        )

        variables = (("pressure_stagnation", "psi"),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            AttributeError,
            "For total" " pressure, zone xyzzy is missing one or more of" " ('density', 'momentum', 'pressure').",
        )

        variables = (("temperature", "degR"),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            AttributeError,
            "For static" " temperature, zone xyzzy is missing one or more of" " ('density', 'pressure').",
        )

        variables = (("temperature_stagnation", "degR"),)
        assert_raises(
            self,
            "surface_probe(wedge, surfaces, variables)",
            globals(),
            locals(),
            AttributeError,
            "For total" " temperature, zone xyzzy is missing one or more of" " ('density', 'momentum', 'pressure').",
        )
예제 #14
0
    def test_demote(self):
        logging.debug('')
        logging.debug('test_demote')
        logger = logging.getLogger()

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)

        ij_surface = wedge.extract([(0, -1, 0, -1, 0, 0)])
        self.assertEqual(ij_surface.shape, [(30, 20, 1)])
        ij_surface.demote()
        self.assertEqual(ij_surface.shape, [(30, 20)])

        jk_surface = wedge.extract([(0, 0, 0, -1, 0, -1)])
        self.assertEqual(jk_surface.shape, [(1, 20, 10)])
        jk_surface.demote()
        self.assertEqual(jk_surface.shape, [(20, 10)])

        ik_surface = wedge.extract([(0, -1, 0, 0, 0, -1)])
        self.assertEqual(ik_surface.shape, [(30, 1, 10)])
        ik_surface.demote()
        self.assertEqual(ik_surface.shape, [(30, 10)])

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        wedge.make_cylindrical()

        ij_surface = wedge.extract([(0, -1, 0, -1, 0, 0)])
        self.assertEqual(ij_surface.shape, [(30, 20, 1)])
        ij_surface.demote()
        self.assertEqual(ij_surface.shape, [(30, 20)])

        jk_surface = wedge.extract([(0, 0, 0, -1, 0, -1)])
        self.assertEqual(jk_surface.shape, [(1, 20, 10)])
        jk_surface.demote()
        self.assertEqual(jk_surface.shape, [(20, 10)])

        ik_surface = wedge.extract([(0, -1, 0, 0, 0, -1)])
        self.assertEqual(ik_surface.shape, [(30, 1, 10)])
        ik_surface.demote()
        self.assertEqual(ik_surface.shape, [(30, 10)])

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)

        i_curve = wedge.extract([(0, -1, 0, 0)])
        self.assertEqual(i_curve.shape, [(30, 1)])
        i_curve.demote()
        self.assertEqual(i_curve.shape, [(30, )])

        j_curve = wedge.extract([(0, 0, 0, -1)])
        self.assertEqual(j_curve.shape, [(1, 20)])
        j_curve.demote()
        self.assertEqual(j_curve.shape, [(20, )])

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        wedge.make_cylindrical()

        i_curve = wedge.extract([(0, -1, 0, 0)])
        self.assertEqual(i_curve.shape, [(30, 1)])
        i_curve.demote()
        self.assertEqual(i_curve.shape, [(30, )])

        j_curve = wedge.extract([(0, 0, 0, -1)])
        self.assertEqual(j_curve.shape, [(1, 20)])
        j_curve.demote()
        self.assertEqual(j_curve.shape, [(20, )])

        assert_raises(self, 'FlowSolution().demote()', globals(), locals(),
                      RuntimeError, 'FlowSolution is empty!')

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        assert_raises(self, 'wedge.xyzzy.flow_solution.demote()', globals(),
                      locals(), RuntimeError,
                      'No i, j, or k plane to collapse')
        assert_raises(self, 'wedge.xyzzy.grid_coordinates.demote()', globals(),
                      locals(), RuntimeError,
                      'No i, j, or k plane to collapse')

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        assert_raises(self, 'wedge.xyzzy.flow_solution.demote()', globals(),
                      locals(), RuntimeError, 'No i or j plane to collapse')
        assert_raises(self, 'wedge.xyzzy.grid_coordinates.demote()', globals(),
                      locals(), RuntimeError, 'No i or j plane to collapse')

        curve = create_curve_2d(20, 0.5, 30.)
        assert_raises(self, 'curve.xyzzy.flow_solution.demote()', globals(),
                      locals(), RuntimeError, 'FlowSolution is 1D')
        assert_raises(self, 'curve.xyzzy.grid_coordinates.demote()', globals(),
                      locals(), RuntimeError, 'Vector is 1D')
예제 #15
0
    def test_extract(self):
        logging.debug('')
        logging.debug('test_extract')

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)

        domain = wedge.extract([(10, -10, 10, 15, 0, -1)])
        volume = domain.xyzzy
        self.assertEqual(volume.shape, (11, 6, 10))
        self.assertEqual(volume.flow_solution.shape, (11, 6, 10))
        assert_rel_error(
            self, volume.extent,
            (1.116717, 1.6842105, 0.0, 0.84210527, 1.7241379, 3.4482758),
            0.000001)

        surface = wedge.xyzzy.extract(0, -1, 10, 10, 0, -1)
        self.assertEqual(surface.shape, (30, 1, 10))
        self.assertEqual(surface.flow_solution.shape, (30, 1, 10))
        assert_rel_error(self, surface.extent,
                         (1.116717, 1.2894737, 0.0, 0.64473683, 0.0, 5.0),
                         0.000001)

        curve = wedge.xyzzy.extract(-1, -1, 10, 10, 0, -1)
        self.assertEqual(curve.shape, (1, 1, 10))
        self.assertEqual(curve.flow_solution.shape, (1, 1, 10))
        assert_rel_error(self, curve.extent,
                         (1.116717, 1.2894737, 0.0, 0.64473683, 5.0, 5.0),
                         0.000001)

        code = 'wedge.xyzzy.flow_solution.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '3D extract requires jmin, jmax, kmin, and kmax')
        code = 'wedge.xyzzy.flow_solution.momentum.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '3D extract requires jmin, jmax, kmin, and kmax')
        code = 'wedge.xyzzy.grid_coordinates.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '3D extract requires jmin, jmax, kmin, and kmax')

        code = 'wedge.xyzzy.flow_solution.extract(0, 99, 0, 99, 0, 99)'
        assert_raises(
            self, code, globals(), locals(), ValueError,
            'Extraction region (0, 99, 0, 99, 0, 99)'
            ' exceeds original (0, 30, 0, 20, 0, 10)')
        code = 'wedge.xyzzy.flow_solution.momentum.extract(0, 99, 0, 99, 0, 99)'
        assert_raises(
            self, code, globals(), locals(), ValueError,
            'Extraction region (0, 99, 0, 99, 0, 99)'
            ' exceeds original (0, 30, 0, 20, 0, 10)')
        code = 'wedge.xyzzy.grid_coordinates.extract(0, 99, 0, 99, 0, 99)'
        assert_raises(
            self, code, globals(), locals(), ValueError,
            'Extraction region (0, 99, 0, 99, 0, 99)'
            ' exceeds original (0, 30, 0, 20, 0, 10)')

        wedge = create_wedge_2d((20, 10), 0.5, 2., 30.)

        surface = wedge.xyzzy.extract(5, -5, 1, -2)
        self.assertEqual(surface.shape, (11, 8))
        self.assertEqual(surface.flow_solution.shape, (11, 8))
        assert_rel_error(self, surface.extent,
                         (0.79956603, 1.6813611, 0.05202432, 0.75587231),
                         0.000001)

        curve = wedge.xyzzy.extract(0, -1, 5, 5)
        self.assertEqual(curve.shape, (20, 1))
        self.assertEqual(curve.flow_solution.shape, (20, 1))
        assert_rel_error(self, curve.extent,
                         (0.47899476, 1.915979, 0.14340162, 0.57360649),
                         0.000001)

        code = 'wedge.xyzzy.flow_solution.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract undefined for kmin or kmax')
        code = 'wedge.xyzzy.flow_solution.momentum.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract undefined for kmin or kmax')
        code = 'wedge.xyzzy.grid_coordinates.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract undefined for kmin or kmax')

        code = 'wedge.xyzzy.flow_solution.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract requires jmin and jmax')
        code = 'wedge.xyzzy.flow_solution.momentum.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract requires jmin and jmax')
        code = 'wedge.xyzzy.grid_coordinates.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract requires jmin and jmax')

        code = 'wedge.xyzzy.flow_solution.extract(0, 99, 0, 99)'
        assert_raises(
            self, code, globals(), locals(), ValueError,
            'Extraction region (0, 99, 0, 99)'
            ' exceeds original (0, 20, 0, 10)')
        code = 'wedge.xyzzy.flow_solution.momentum.extract(0, 99, 0, 99)'
        assert_raises(
            self, code, globals(), locals(), ValueError,
            'Extraction region (0, 99, 0, 99)'
            ' exceeds original (0, 20, 0, 10)')
        code = 'wedge.xyzzy.grid_coordinates.extract(0, 99, 0, 99)'
        assert_raises(
            self, code, globals(), locals(), ValueError,
            'Extraction region (0, 99, 0, 99)'
            ' exceeds original (0, 20, 0, 10)')

        curve = create_curve_2d(20, 0.5, 30.)
        subcurve = curve.xyzzy.extract(1, -2)
        self.assertEqual(subcurve.shape, (18, ))
        self.assertEqual(subcurve.flow_solution.shape, (18, ))
        assert_rel_error(self, subcurve.extent,
                         (0.43973687, 0.49981016, 0.013777171, 0.23797369),
                         0.000001)

        code = 'curve.xyzzy.flow_solution.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '1D extract undefined for jmin, jmax, kmin, or kmax')
        code = 'curve.xyzzy.flow_solution.momentum.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '1D extract undefined for jmin, jmax, kmin, or kmax')
        code = 'curve.xyzzy.grid_coordinates.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '1D extract undefined for jmin, jmax, kmin, or kmax')

        code = 'curve.xyzzy.flow_solution.extract(0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99) exceeds original (0, 20)')
        code = 'curve.xyzzy.flow_solution.momentum.extract(0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99) exceeds original (0, 20)')
        code = 'curve.xyzzy.grid_coordinates.extract(0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99) exceeds original (0, 20)')

        assert_raises(self, 'FlowSolution().extract(0, -1)', globals(),
                      locals(), RuntimeError, 'FlowSolution is empty!')
        assert_raises(self, 'GridCoordinates().extract(0, -1)', globals(),
                      locals(), RuntimeError, 'Vector is empty!')
        assert_raises(self, 'Vector().extract(0, -1)', globals(), locals(),
                      RuntimeError, 'Vector is empty!')

        # No-op extractions.
        logger = logging.getLogger()
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        domain = wedge.extract([(0, 29, 0, 19, 0, 9)])
        self.assertTrue(domain.is_equivalent(wedge, logger))
        domain = wedge.extract([(-30, -1, -20, -1, -10, -1)])
        self.assertTrue(domain.is_equivalent(wedge, logger))
        vec = wedge.xyzzy.flow_solution.momentum.extract(0, 29, 0, 19, 0, 9)
        self.assertTrue(
            vec.is_equivalent(wedge.xyzzy.flow_solution.momentum, 'momentum',
                              logger))
        vec = wedge.xyzzy.flow_solution.momentum.extract(
            -30, -1, -20, -1, -10, -1)
        self.assertTrue(
            vec.is_equivalent(wedge.xyzzy.flow_solution.momentum, 'momentum',
                              logger))

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        domain = wedge.extract([(0, 29, 0, 19)])
        self.assertTrue(domain.is_equivalent(wedge, logger))
        domain = wedge.extract([(-30, -1, -20, -1)])
        self.assertTrue(domain.is_equivalent(wedge, logger))
        vec = wedge.xyzzy.flow_solution.momentum.extract(0, 29, 0, 19)
        self.assertTrue(
            vec.is_equivalent(wedge.xyzzy.flow_solution.momentum, 'momentum',
                              logger))
        vec = wedge.xyzzy.flow_solution.momentum.extract(-30, -1, -20, -1)
        self.assertTrue(
            vec.is_equivalent(wedge.xyzzy.flow_solution.momentum, 'momentum',
                              logger))

        curve = create_curve_2d(20, 0.5, 30.)
        domain = curve.extract([(0, 19)])
        self.assertTrue(domain.is_equivalent(curve, logger))
        domain = curve.extract([(-20, -1)])
        self.assertTrue(domain.is_equivalent(curve, logger))
        vec = curve.xyzzy.flow_solution.momentum.extract(0, 19)
        self.assertTrue(
            vec.is_equivalent(curve.xyzzy.flow_solution.momentum, 'momentum',
                              logger))
        vec = curve.xyzzy.flow_solution.momentum.extract(-20, -1)
        self.assertTrue(
            vec.is_equivalent(curve.xyzzy.flow_solution.momentum, 'momentum',
                              logger))
예제 #16
0
    def test_extend(self):
        logging.debug('')
        logging.debug('test_extend')
        logger = logging.getLogger()

        # Create vanilla 3D wedge.
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        self.assertEqual(wedge.xyzzy.shape, (30, 20, 10))
        self.assertEqual(wedge.xyzzy.flow_solution.shape, (30, 20, 10))

        # Extend for ghost planes.
        domain = wedge.extend([('i', +1., 2, 1)])
        zone = domain.xyzzy
        self.assertEqual(zone.shape, (32, 20, 10))
        self.assertEqual(zone.flow_solution.shape, (31, 20, 10))
        zone = zone.extend('i', -1., 3, 1)
        self.assertEqual(zone.shape, (35, 20, 10))
        self.assertEqual(zone.flow_solution.shape, (32, 20, 10))
        zone = zone.extend('j', +1., 2, 1)
        self.assertEqual(zone.shape, (35, 22, 10))
        self.assertEqual(zone.flow_solution.shape, (32, 21, 10))
        zone = zone.extend('j', -1., 3, 1)
        self.assertEqual(zone.shape, (35, 25, 10))
        self.assertEqual(zone.flow_solution.shape, (32, 22, 10))
        zone = zone.extend('k', +1., 2, 1)
        self.assertEqual(zone.shape, (35, 25, 12))
        self.assertEqual(zone.flow_solution.shape, (32, 22, 11))
        zone = zone.extend('k', -1., 3, 1)
        self.assertEqual(zone.shape, (35, 25, 15))
        self.assertEqual(zone.flow_solution.shape, (32, 22, 12))
        self.assertEqual(zone.grid_coordinates.shape, (35, 25, 15))

        # Uncomment to visualize result.
        # Note that unless you fix the flow extensions above to match the grid
        # extensions the flow will have strange artifacts.
        #        write_plot3d_q(zone, 'ghost_wedge.xyz', 'ghost_wedge.q')

        zone.grid_coordinates.ghosts = (3, 2, 3, 2, 3, 2)
        self.assertEqual(zone.grid_coordinates.shape, (30, 20, 10))
        zone.flow_solution.ghosts = (1, 1, 1, 1, 1, 1)
        self.assertEqual(zone.flow_solution.shape, (30, 20, 10))

        # Extract to no-ghosts zone and show equivalent to original.
        zone2 = zone.extract(0,
                             -1,
                             0,
                             -1,
                             0,
                             -1,
                             grid_ghosts=(0, 0, 0, 0, 0, 0),
                             flow_ghosts=(0, 0, 0, 0, 0, 0))
        self.assertEqual(zone2.shape, (30, 20, 10))
        self.assertEqual(zone2.flow_solution.shape, (30, 20, 10))
        self.assertTrue(zone2.is_equivalent(wedge.xyzzy, logger))

        # Write out with ghosts in place. Read and show equivalent to original.
        try:
            write_plot3d_q(zone, 'zone_3d.xyz', 'zone_3d.q')
            domain = read_plot3d_q('zone_3d.xyz',
                                   'zone_3d.q',
                                   multiblock=False)
            self.assertTrue(domain.zone_1.is_equivalent(wedge.xyzzy, logger))
        finally:
            for name in ('zone_3d.xyz', 'zone_3d.q'):
                if os.path.exists(name):
                    os.remove(name)

        # Create vanilla 2D wedge.
        wedge = create_wedge_2d((20, 10), 0.5, 2., 30.)
        self.assertEqual(wedge.xyzzy.shape, (20, 10))
        self.assertEqual(wedge.xyzzy.flow_solution.shape, (20, 10))

        # Extend for ghost planes.
        zone = wedge.xyzzy.extend('i', +1., 2, 1)
        self.assertEqual(zone.shape, (22, 10))
        self.assertEqual(zone.flow_solution.shape, (21, 10))
        zone = zone.extend('i', -1., 3, 1)
        self.assertEqual(zone.shape, (25, 10))
        self.assertEqual(zone.flow_solution.shape, (22, 10))
        zone = zone.extend('j', +1., 2, 1)
        self.assertEqual(zone.shape, (25, 12))
        self.assertEqual(zone.flow_solution.shape, (22, 11))
        zone = zone.extend('j', -1., 3, 1)
        self.assertEqual(zone.shape, (25, 15))
        self.assertEqual(zone.flow_solution.shape, (22, 12))

        # Uncomment to visualize result.
        # Note that unless you fix the flow extensions above to match the grid
        # extensions the flow will have strange artifacts.
        #        write_plot3d_q(zone, 'ghost_sector.xyz', 'ghost_sector.q')

        zone.grid_coordinates.ghosts = (3, 2, 3, 2)
        self.assertEqual(zone.grid_coordinates.shape, (20, 10))
        zone.flow_solution.ghosts = (1, 1, 1, 1)
        self.assertEqual(zone.flow_solution.shape, (20, 10))
        write_plot3d_q(wedge, 'zone_2d.xyz', 'zone_2d.q')

        # Extract to no-ghosts zone and show equivalent to original.
        zone2 = zone.extract(0,
                             -1,
                             0,
                             -1,
                             grid_ghosts=(0, 0, 0, 0, 0, 0),
                             flow_ghosts=(0, 0, 0, 0, 0, 0))
        self.assertEqual(zone2.shape, (20, 10))
        self.assertEqual(zone2.flow_solution.shape, (20, 10))
        self.assertTrue(zone2.is_equivalent(wedge.xyzzy, logger))

        # Write out with ghosts in place. Read and show equivalent to original.
        try:
            write_plot3d_q(zone, 'zone_2d.xyz', 'zone_2d.q')
            domain = read_plot3d_q('zone_2d.xyz',
                                   'zone_2d.q',
                                   dim=2,
                                   multiblock=False)
            self.assertTrue(domain.zone_1.is_equivalent(wedge.xyzzy, logger))
        finally:
            for name in ('zone_2d.xyz', 'zone_2d.q'):
                if os.path.exists(name):
                    os.remove(name)

        # Create vanilla 2D curve.
        curve = create_curve_2d(20, 0.5, 30.)
        self.assertEqual(curve.xyzzy.shape, (20, ))
        self.assertEqual(curve.xyzzy.flow_solution.shape, (20, ))

        # Extend for ghost planes.
        zone = curve.xyzzy.extend('i', +1., 2, 1)
        self.assertEqual(zone.shape, (22, ))
        self.assertEqual(zone.flow_solution.shape, (21, ))
        zone = zone.extend('i', -1., 3, 1)
        self.assertEqual(zone.shape, (25, ))
        self.assertEqual(zone.flow_solution.shape, (22, ))

        zone.grid_coordinates.ghosts = (3, 2)
        self.assertEqual(zone.grid_coordinates.shape, (20, ))
        zone.flow_solution.ghosts = (1, 1)
        self.assertEqual(zone.flow_solution.shape, (20, ))

        # Extract to no-ghosts zone and show equivalent to original.
        zone = zone.extract(0,
                            -1,
                            grid_ghosts=(0, 0, 0, 0, 0, 0),
                            flow_ghosts=(0, 0, 0, 0, 0, 0))
        self.assertEqual(zone.shape, (20, ))
        self.assertEqual(zone.flow_solution.shape, (20, ))
        self.assertTrue(zone.is_equivalent(curve.xyzzy, logger))

        # No-op extend.
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        domain = wedge.extend([('i', +1., 0, 0)])
        self.assertTrue(domain.is_equivalent(wedge, logger))

        assert_raises(self, "wedge.xyzzy.flow_solution.extend('i', 0., 10)",
                      globals(), locals(), ValueError,
                      'delta must be non-zero')
        assert_raises(self, "wedge.xyzzy.grid_coordinates.extend('i', 0., 10)",
                      globals(), locals(), ValueError,
                      'delta must be non-zero')
        assert_raises(
            self, "wedge.xyzzy.flow_solution.momentum.extend('i', 0., 10)",
            globals(), locals(), ValueError, 'delta must be non-zero')

        assert_raises(self, "wedge.xyzzy.flow_solution.extend('i', 1., 0)",
                      globals(), locals(), ValueError, 'npoints must be >= 1')
        assert_raises(self, "wedge.xyzzy.grid_coordinates.extend('i', 1., 0)",
                      globals(), locals(), ValueError, 'npoints must be >= 1')
        assert_raises(self,
                      "wedge.xyzzy.flow_solution.momentum.extend('i', 1., 0)",
                      globals(), locals(), ValueError, 'npoints must be >= 1')

        assert_raises(self, "wedge.xyzzy.flow_solution.extend('l', 1., 10)",
                      globals(), locals(), ValueError,
                      'axis must be i, j, or k')
        assert_raises(self, "wedge.xyzzy.grid_coordinates.extend('l', 1., 10)",
                      globals(), locals(), ValueError,
                      'axis must be i, j, or k')
        assert_raises(
            self, "wedge.xyzzy.flow_solution.momentum.extend('l', 1., 10)",
            globals(), locals(), ValueError, 'axis must be i, j, or k')

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        assert_raises(self, "wedge.xyzzy.flow_solution.extend('k', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i or j')
        assert_raises(self, "wedge.xyzzy.grid_coordinates.extend('k', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i or j')
        assert_raises(
            self, "wedge.xyzzy.flow_solution.momentum.extend('k', 1., 10)",
            globals(), locals(), ValueError, 'axis must be i or j')

        curve = create_curve_2d(20, 0.5, 30.)
        assert_raises(self, "curve.xyzzy.flow_solution.extend('j', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i')
        assert_raises(self, "curve.xyzzy.grid_coordinates.extend('j', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i')
        assert_raises(
            self, "curve.xyzzy.flow_solution.momentum.extend('j', 1., 10)",
            globals(), locals(), ValueError, 'axis must be i')

        assert_raises(self, "FlowSolution().extend('j', 1., 10)", globals(),
                      locals(), RuntimeError, 'FlowSolution is empty!')
        assert_raises(self, "GridCoordinates().extend('j', 1., 10)", globals(),
                      locals(), RuntimeError, 'Grid is empty!')
        assert_raises(self, "Vector().extend('j', 1., 10)", globals(),
                      locals(), RuntimeError, 'Vector is empty!')
예제 #17
0
    def test_extract(self):
        logging.debug('')
        logging.debug('test_extract')

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)

        domain = wedge.extract([(10, -10, 10, 15, 0, -1)])
        volume = domain.xyzzy
        self.assertEqual(volume.shape, (11, 6, 10))
        self.assertEqual(volume.flow_solution.shape, (11, 6, 10))
        assert_rel_error(self, volume.extent,
                         (1.116717, 1.6842105, 0.0, 0.84210527, 1.7241379, 3.4482758),
                         0.000001)

        surface = wedge.xyzzy.extract(0, -1, 10, 10, 0, -1)
        self.assertEqual(surface.shape, (30, 1, 10))
        self.assertEqual(surface.flow_solution.shape, (30, 1, 10))
        assert_rel_error(self, surface.extent,
                         (1.116717, 1.2894737, 0.0, 0.64473683, 0.0, 5.0),
                         0.000001)

        curve = wedge.xyzzy.extract(-1, -1, 10, 10, 0, -1)
        self.assertEqual(curve.shape, (1, 1, 10))
        self.assertEqual(curve.flow_solution.shape, (1, 1, 10))
        assert_rel_error(self, curve.extent,
                         (1.116717, 1.2894737, 0.0, 0.64473683, 5.0, 5.0),
                         0.000001)

        code = 'wedge.xyzzy.flow_solution.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '3D extract requires jmin, jmax, kmin, and kmax')
        code = 'wedge.xyzzy.flow_solution.momentum.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '3D extract requires jmin, jmax, kmin, and kmax')
        code = 'wedge.xyzzy.grid_coordinates.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '3D extract requires jmin, jmax, kmin, and kmax')

        code = 'wedge.xyzzy.flow_solution.extract(0, 99, 0, 99, 0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99, 0, 99, 0, 99)'
                      ' exceeds original (0, 30, 0, 20, 0, 10)')
        code = 'wedge.xyzzy.flow_solution.momentum.extract(0, 99, 0, 99, 0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99, 0, 99, 0, 99)'
                      ' exceeds original (0, 30, 0, 20, 0, 10)')
        code = 'wedge.xyzzy.grid_coordinates.extract(0, 99, 0, 99, 0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99, 0, 99, 0, 99)'
                      ' exceeds original (0, 30, 0, 20, 0, 10)')

        wedge = create_wedge_2d((20, 10), 0.5, 2., 30.)

        surface = wedge.xyzzy.extract(5, -5, 1, -2)
        self.assertEqual(surface.shape, (11, 8))
        self.assertEqual(surface.flow_solution.shape, (11, 8))
        assert_rel_error(self, surface.extent,
                         (0.79956603, 1.6813611, 0.05202432, 0.75587231),
                         0.000001)

        curve = wedge.xyzzy.extract(0, -1, 5, 5)
        self.assertEqual(curve.shape, (20, 1))
        self.assertEqual(curve.flow_solution.shape, (20, 1))
        assert_rel_error(self, curve.extent,
                         (0.47899476, 1.915979, 0.14340162, 0.57360649),
                         0.000001)

        code = 'wedge.xyzzy.flow_solution.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract undefined for kmin or kmax')
        code = 'wedge.xyzzy.flow_solution.momentum.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract undefined for kmin or kmax')
        code = 'wedge.xyzzy.grid_coordinates.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract undefined for kmin or kmax')

        code = 'wedge.xyzzy.flow_solution.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract requires jmin and jmax')
        code = 'wedge.xyzzy.flow_solution.momentum.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract requires jmin and jmax')
        code = 'wedge.xyzzy.grid_coordinates.extract(0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '2D extract requires jmin and jmax')

        code = 'wedge.xyzzy.flow_solution.extract(0, 99, 0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99, 0, 99)'
                      ' exceeds original (0, 20, 0, 10)')
        code = 'wedge.xyzzy.flow_solution.momentum.extract(0, 99, 0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99, 0, 99)'
                      ' exceeds original (0, 20, 0, 10)')
        code = 'wedge.xyzzy.grid_coordinates.extract(0, 99, 0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99, 0, 99)'
                      ' exceeds original (0, 20, 0, 10)')

        curve = create_curve_2d(20, 0.5, 30.)
        subcurve = curve.xyzzy.extract(1, -2)
        self.assertEqual(subcurve.shape, (18,))
        self.assertEqual(subcurve.flow_solution.shape, (18,))
        assert_rel_error(self, subcurve.extent,
                         (0.43973687, 0.49981016, 0.013777171, 0.23797369),
                         0.000001)

        code = 'curve.xyzzy.flow_solution.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '1D extract undefined for jmin, jmax, kmin, or kmax')
        code = 'curve.xyzzy.flow_solution.momentum.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '1D extract undefined for jmin, jmax, kmin, or kmax')
        code = 'curve.xyzzy.grid_coordinates.extract(0, -1, 0, -1, 0, -1)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      '1D extract undefined for jmin, jmax, kmin, or kmax')

        code = 'curve.xyzzy.flow_solution.extract(0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99) exceeds original (0, 20)')
        code = 'curve.xyzzy.flow_solution.momentum.extract(0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99) exceeds original (0, 20)')
        code = 'curve.xyzzy.grid_coordinates.extract(0, 99)'
        assert_raises(self, code, globals(), locals(), ValueError,
                      'Extraction region (0, 99) exceeds original (0, 20)')

        assert_raises(self, 'FlowSolution().extract(0, -1)',
                      globals(), locals(), RuntimeError,
                      'FlowSolution is empty!')
        assert_raises(self, 'GridCoordinates().extract(0, -1)',
                      globals(), locals(), RuntimeError,
                      'Vector is empty!')
        assert_raises(self, 'Vector().extract(0, -1)',
                      globals(), locals(), RuntimeError,
                      'Vector is empty!')

        # No-op extractions.
        logger = logging.getLogger()
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        domain = wedge.extract([(0, 29, 0, 19, 0, 9)])
        self.assertTrue(domain.is_equivalent(wedge, logger))
        domain = wedge.extract([(-30, -1, -20, -1, -10, -1)])
        self.assertTrue(domain.is_equivalent(wedge, logger))
        vec = wedge.xyzzy.flow_solution.momentum.extract(0, 29, 0, 19, 0, 9)
        self.assertTrue(vec.is_equivalent(wedge.xyzzy.flow_solution.momentum,
                                          'momentum', logger))
        vec = wedge.xyzzy.flow_solution.momentum.extract(-30, -1, -20, -1, -10, -1)
        self.assertTrue(vec.is_equivalent(wedge.xyzzy.flow_solution.momentum,
                                          'momentum', logger))

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        domain = wedge.extract([(0, 29, 0, 19)])
        self.assertTrue(domain.is_equivalent(wedge, logger))
        domain = wedge.extract([(-30, -1, -20, -1)])
        self.assertTrue(domain.is_equivalent(wedge, logger))
        vec = wedge.xyzzy.flow_solution.momentum.extract(0, 29, 0, 19)
        self.assertTrue(vec.is_equivalent(wedge.xyzzy.flow_solution.momentum,
                                          'momentum', logger))
        vec = wedge.xyzzy.flow_solution.momentum.extract(-30, -1, -20, -1)
        self.assertTrue(vec.is_equivalent(wedge.xyzzy.flow_solution.momentum,
                                          'momentum', logger))

        curve = create_curve_2d(20, 0.5, 30.)
        domain = curve.extract([(0, 19)])
        self.assertTrue(domain.is_equivalent(curve, logger))
        domain = curve.extract([(-20, -1)])
        self.assertTrue(domain.is_equivalent(curve, logger))
        vec = curve.xyzzy.flow_solution.momentum.extract(0, 19)
        self.assertTrue(vec.is_equivalent(curve.xyzzy.flow_solution.momentum,
                                          'momentum', logger))
        vec = curve.xyzzy.flow_solution.momentum.extract(-20, -1)
        self.assertTrue(vec.is_equivalent(curve.xyzzy.flow_solution.momentum,
                                          'momentum', logger))
예제 #18
0
    def test_flow(self):
        logging.debug('')
        logging.debug('test_flow')

        logger = logging.getLogger()

        flow = FlowSolution()
        self.assertEqual(flow.grid_location, 'Vertex')
        self.assertEqual(flow.ghosts, (0, 0, 0, 0, 0, 0))

        self.assertFalse(flow.is_equivalent([], logger))

        other = FlowSolution()
        self.assertTrue(flow.is_equivalent(other, logger))
        other.grid_location = 'CellCenter'
        self.assertFalse(flow.is_equivalent(other, logger))
        other.grid_location = 'Vertex'
        other.ghosts = [1, 1, 1, 1, 1, 1]
        self.assertFalse(flow.is_equivalent(other, logger))

        assert_raises(self, "flow.grid_location = 'pluto'",
                      globals(), locals(), ValueError,
                      "'pluto' is not a valid grid location", use_exec=True)

        assert_raises(self, "flow.ghosts = [1, 2, 3, 4, 5, -6]",
                      globals(), locals(), ValueError,
                      'All ghost values must be >= 0', use_exec=True)

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        domain = wedge.copy()

        assert_raises(self, "domain.xyzzy.flow_solution.ghosts = []",
                      globals(), locals(), ValueError,
                      'ghosts must be a 6-element array', use_exec=True)

        assert_raises(self,
                      "domain.xyzzy.flow_solution.add_array('density',"
                      " numpy.zeros(domain.xyzzy.shape, numpy.float32))",
                      globals(), locals(), ValueError,
                      "name 'density' is already bound")

        assert_raises(self,
                      "domain.xyzzy.flow_solution.add_vector('momentum',"
                      " numpy.zeros(domain.xyzzy.shape, numpy.float32))",
                      globals(), locals(), ValueError,
                      "name 'momentum' is already bound")

        self.assertTrue(domain.is_equivalent(wedge, logger))
        pressure = wedge.xyzzy.flow_solution.density.copy()
        domain.xyzzy.flow_solution.add_array('pressure', pressure)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        pressure2 = wedge.xyzzy.flow_solution.density.copy()
        wedge.xyzzy.flow_solution.add_array('pressure', pressure2)
        self.assertTrue(domain.is_equivalent(wedge, logger))

        assert_raises(self,
                      "domain.xyzzy.flow_solution.add_array('empty', numpy.zeros(()))",
                      globals(), locals(), ValueError,
                      'array shape () != existing shape (30, 20, 10)')

        assert_raises(self,
                      "domain.xyzzy.flow_solution.add_vector('empty', Vector())",
                      globals(), locals(), ValueError,
                      'vector real shape () != existing real shape (30, 20, 10)')

        self.assertTrue(domain.is_equivalent(wedge, logger))
        pressure2[0][0][0] += 1.
        self.assertFalse(domain.is_equivalent(wedge, logger))
        self.assertFalse(domain.is_equivalent(wedge, logger, tolerance=0.00001))
 
        pressure2[0][0][0] -= 1.
        self.assertTrue(domain.is_equivalent(wedge, logger))
        domain.xyzzy.flow_solution.add_vector('mom2',
                                            domain.xyzzy.flow_solution.momentum)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        flow = FlowSolution()
        self.assertEqual(flow.shape, ())
예제 #19
0
    def test_grid(self):
        logging.debug('')
        logging.debug('test_grid')

        logger = logging.getLogger()

        grid = GridCoordinates()
        self.assertEqual(grid.shape, ())
        self.assertEqual(grid.extent, ())
        self.assertEqual(grid.ghosts, (0, 0, 0, 0, 0, 0))

        self.assertFalse(grid.is_equivalent([], logger))

        other = GridCoordinates()
        self.assertTrue(grid.is_equivalent(other, logger))
        other.ghosts = [1, 1, 1, 1, 1, 1]
        self.assertFalse(grid.is_equivalent(other, logger))

        assert_raises(self,
                      'grid.ghosts = [0, 1, 2, 3, 4, -5]',
                      globals(),
                      locals(),
                      ValueError,
                      'All ghost values must be >= 0',
                      use_exec=True)

        assert_raises(self, 'grid.translate(1., 0., 0.)', globals(), locals(),
                      AttributeError, 'no X coordinates')

        assert_raises(self, 'grid.translate(0., 1., 0.)', globals(), locals(),
                      AttributeError, 'no Y coordinates')

        assert_raises(self, 'grid.translate(0., 0., 1.)', globals(), locals(),
                      AttributeError, 'no Z coordinates')

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)

        assert_raises(self,
                      'wedge.xyzzy.grid_coordinates.ghosts = []',
                      globals(),
                      locals(),
                      ValueError,
                      'ghosts must be a 6-element array',
                      use_exec=True)

        assert_raises(
            self, "wedge.xyzzy.grid_coordinates.make_cylindrical(axis='q')",
            globals(), locals(), ValueError, "axis must be 'z' or 'x'")

        wedge.xyzzy.grid_coordinates.make_cylindrical(axis='z')
        assert_rel_error(self, wedge.xyzzy.grid_coordinates.extent,
                         (0.5, 2.0, 0.0, 0.52359879, 0.0, 5.0), 0.000001)
        assert_raises(self,
                      "wedge.xyzzy.grid_coordinates.make_cartesian(axis='q')",
                      globals(), locals(), ValueError,
                      "axis must be 'z' or 'x'")
        wedge.xyzzy.grid_coordinates.make_cartesian(axis='z')
        assert_rel_error(self, wedge.xyzzy.grid_coordinates.extent,
                         (0.43301269, 2.0, 0.0, 1.0, 0.0, 5.0), 0.000001)

        wedge = create_wedge_2d((20, 10), 0.5, 2., 30.)
        wedge.xyzzy.grid_coordinates.make_cylindrical()
        assert_rel_error(self, wedge.xyzzy.grid_coordinates.extent,
                         (0.5, 2.0, 0.0, 0.52359879), 0.000001)

        curve = create_curve_2d(20, 0.5, 30.)
        assert_rel_error(self, curve.xyzzy.grid_coordinates.extent,
                         (0.43301269, 0.5, 0.0, 0.25), 0.000001)
        curve.xyzzy.grid_coordinates.make_cylindrical()
        assert_rel_error(self, curve.xyzzy.grid_coordinates.extent,
                         (0.5, 0.5, 0.0, 0.52359879), 0.000001)
예제 #20
0
    def test_domain(self):
        logging.debug('')
        logging.debug('test_domain')

        logger = logging.getLogger()
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30., 'x')

        domain = DomainObj()
        self.assertEqual(domain.reference_state, None)
        self.assertEqual(domain.zones, [])
        self.assertEqual(domain.shape, [])
        self.assertEqual(domain.extent, [])

        self.assertFalse(domain.is_equivalent([], logger))

        domain.add_domain(wedge, make_copy=True)
        self.assertTrue(domain.is_equivalent(wedge))
        self.assertEqual(domain.shape, [(30, 20, 10)])
        self.assertEqual(domain.extent[0][:2], (0., 5.))
        self.assertEqual(domain.xyzzy.flow_solution.momentum.shape,
                         (30, 20, 10))

        domain.rename_zone('wedge', domain.xyzzy)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        domain = wedge.copy()
        zone = domain.remove_zone('xyzzy')
        self.assertFalse(domain.is_equivalent(wedge, logger))
        domain.add_zone('xyzzy', zone)
        self.assertTrue(domain.is_equivalent(wedge, logger))
        zone = domain.remove_zone(zone)
        self.assertFalse(domain.is_equivalent(wedge, logger))
        domain.add_zone('xyzzy', zone)
        self.assertTrue(domain.is_equivalent(wedge, logger))

        assert_raises(self, 'domain.remove_zone(Zone())', globals(), locals(),
                      ValueError, 'cannot find zone!')

        # Translations ordered for test coverage.
        domain.translate(0., 0., 0.5)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        domain.translate(0., 1., 0.)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        domain.translate(2.5, 0., 0.)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        domain.rotate_about_x(90.)

        domain.add_domain(wedge)
        self.assertEqual(domain.shape, [(30, 20, 10), (30, 20, 10)])

        # Uncomment to visualize result.
        #        write_plot3d_q(domain, 'doubled.xyz', 'doubled.q')

        domain.rotate_about_y(90.)
        domain.rotate_about_z(90.)

        domain.deallocate()
        self.assertEqual(domain.shape, [])
        self.assertEqual(domain.extent, [])

        domain = wedge.copy()

        assert_raises(self, "domain.add_zone('xyzzy', wedge)", globals(),
                      locals(), ValueError, "name 'xyzzy' is already bound")

        assert_raises(self, "domain.rename_zone('xyzzy', domain.xyzzy)",
                      globals(), locals(), ValueError,
                      "name 'xyzzy' is already bound")
예제 #21
0
    def test_domain(self):
        logging.debug('')
        logging.debug('test_domain')

        logger = logging.getLogger()
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30., 'x')

        domain = DomainObj()
        self.assertEqual(domain.reference_state, None)
        self.assertEqual(domain.zones, [])
        self.assertEqual(domain.shape, [])
        self.assertEqual(domain.extent, [])

        self.assertFalse(domain.is_equivalent([], logger))

        domain.add_domain(wedge, make_copy=True)
        self.assertTrue(domain.is_equivalent(wedge))
        self.assertEqual(domain.shape, [(30, 20, 10)])
        self.assertEqual(domain.extent[0][:2], (0., 5.))
        self.assertEqual(domain.xyzzy.flow_solution.momentum.shape,
                         (30, 20, 10))

        domain.rename_zone('wedge', domain.xyzzy)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        domain = wedge.copy()
        zone = domain.remove_zone('xyzzy')
        self.assertFalse(domain.is_equivalent(wedge, logger))
        domain.add_zone('xyzzy', zone)
        self.assertTrue(domain.is_equivalent(wedge, logger))
        zone = domain.remove_zone(zone)
        self.assertFalse(domain.is_equivalent(wedge, logger))
        domain.add_zone('xyzzy', zone)
        self.assertTrue(domain.is_equivalent(wedge, logger))

        assert_raises(self, 'domain.remove_zone(Zone())', globals(), locals(),
                      ValueError, 'cannot find zone!')

        # Translations ordered for test coverage.
        domain.translate(0., 0., 0.5)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        domain.translate(0., 1., 0.)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        domain.translate(2.5, 0., 0.)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        domain.rotate_about_x(90.)

        domain.add_domain(wedge)
        self.assertEqual(domain.shape, [(30, 20, 10), (30, 20, 10)])

        # Uncomment to visualize result.
#        write_plot3d_q(domain, 'doubled.xyz', 'doubled.q')

        domain.rotate_about_y(90.)
        domain.rotate_about_z(90.)

        domain.deallocate()
        self.assertEqual(domain.shape, [])
        self.assertEqual(domain.extent, [])

        domain = wedge.copy()

        assert_raises(self, "domain.add_zone('xyzzy', wedge)",
                      globals(), locals(), ValueError,
                      "name 'xyzzy' is already bound")

        assert_raises(self, "domain.rename_zone('xyzzy', domain.xyzzy)",
                      globals(), locals(), ValueError,
                      "name 'xyzzy' is already bound")
예제 #22
0
    def test_flow(self):
        logging.debug('')
        logging.debug('test_flow')

        logger = logging.getLogger()

        flow = FlowSolution()
        self.assertEqual(flow.grid_location, 'Vertex')
        self.assertEqual(flow.ghosts, (0, 0, 0, 0, 0, 0))

        self.assertFalse(flow.is_equivalent([], logger))

        other = FlowSolution()
        self.assertTrue(flow.is_equivalent(other, logger))
        other.grid_location = 'CellCenter'
        self.assertFalse(flow.is_equivalent(other, logger))
        other.grid_location = 'Vertex'
        other.ghosts = [1, 1, 1, 1, 1, 1]
        self.assertFalse(flow.is_equivalent(other, logger))

        assert_raises(self,
                      "flow.grid_location = 'pluto'",
                      globals(),
                      locals(),
                      ValueError,
                      "'pluto' is not a valid grid location",
                      use_exec=True)

        assert_raises(self,
                      "flow.ghosts = [1, 2, 3, 4, 5, -6]",
                      globals(),
                      locals(),
                      ValueError,
                      'All ghost values must be >= 0',
                      use_exec=True)

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        domain = wedge.copy()

        assert_raises(self,
                      "domain.xyzzy.flow_solution.ghosts = []",
                      globals(),
                      locals(),
                      ValueError,
                      'ghosts must be a 6-element array',
                      use_exec=True)

        assert_raises(
            self, "domain.xyzzy.flow_solution.add_array('density',"
            " numpy.zeros(domain.xyzzy.shape, numpy.float32))", globals(),
            locals(), ValueError, "name 'density' is already bound")

        assert_raises(
            self, "domain.xyzzy.flow_solution.add_vector('momentum',"
            " numpy.zeros(domain.xyzzy.shape, numpy.float32))", globals(),
            locals(), ValueError, "name 'momentum' is already bound")

        self.assertTrue(domain.is_equivalent(wedge, logger))
        pressure = wedge.xyzzy.flow_solution.density.copy()
        domain.xyzzy.flow_solution.add_array('pressure', pressure)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        pressure2 = wedge.xyzzy.flow_solution.density.copy()
        wedge.xyzzy.flow_solution.add_array('pressure', pressure2)
        self.assertTrue(domain.is_equivalent(wedge, logger))

        assert_raises(
            self,
            "domain.xyzzy.flow_solution.add_array('empty', numpy.zeros(()))",
            globals(), locals(), ValueError,
            'array shape () != existing shape (30, 20, 10)')

        assert_raises(
            self, "domain.xyzzy.flow_solution.add_vector('empty', Vector())",
            globals(), locals(), ValueError,
            'vector real shape () != existing real shape (30, 20, 10)')

        self.assertTrue(domain.is_equivalent(wedge, logger))
        pressure2[0][0][0] += 1.
        self.assertFalse(domain.is_equivalent(wedge, logger))
        self.assertFalse(domain.is_equivalent(wedge, logger,
                                              tolerance=0.00001))

        pressure2[0][0][0] -= 1.
        self.assertTrue(domain.is_equivalent(wedge, logger))
        domain.xyzzy.flow_solution.add_vector(
            'mom2', domain.xyzzy.flow_solution.momentum)
        self.assertFalse(domain.is_equivalent(wedge, logger))

        flow = FlowSolution()
        self.assertEqual(flow.shape, ())
예제 #23
0
    def test_demote(self):
        logging.debug('')
        logging.debug('test_demote')
        logger = logging.getLogger()

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)

        ij_surface = wedge.extract([(0, -1, 0, -1, 0, 0)])
        self.assertEqual(ij_surface.shape, [(30, 20, 1)])
        ij_surface.demote()
        self.assertEqual(ij_surface.shape, [(30, 20)])

        jk_surface = wedge.extract([(0, 0, 0, -1, 0, -1)])
        self.assertEqual(jk_surface.shape, [(1, 20, 10)])
        jk_surface.demote()
        self.assertEqual(jk_surface.shape, [(20, 10)])

        ik_surface = wedge.extract([(0, -1, 0, 0, 0, -1)])
        self.assertEqual(ik_surface.shape, [(30, 1, 10)])
        ik_surface.demote()
        self.assertEqual(ik_surface.shape, [(30, 10)])

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        wedge.make_cylindrical()

        ij_surface = wedge.extract([(0, -1, 0, -1, 0, 0)])
        self.assertEqual(ij_surface.shape, [(30, 20, 1)])
        ij_surface.demote()
        self.assertEqual(ij_surface.shape, [(30, 20)])

        jk_surface = wedge.extract([(0, 0, 0, -1, 0, -1)])
        self.assertEqual(jk_surface.shape, [(1, 20, 10)])
        jk_surface.demote()
        self.assertEqual(jk_surface.shape, [(20, 10)])

        ik_surface = wedge.extract([(0, -1, 0, 0, 0, -1)])
        self.assertEqual(ik_surface.shape, [(30, 1, 10)])
        ik_surface.demote()
        self.assertEqual(ik_surface.shape, [(30, 10)])

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)

        i_curve = wedge.extract([(0, -1, 0, 0)])
        self.assertEqual(i_curve.shape, [(30, 1)])
        i_curve.demote()
        self.assertEqual(i_curve.shape, [(30,)])

        j_curve = wedge.extract([(0, 0, 0, -1)])
        self.assertEqual(j_curve.shape, [(1, 20)])
        j_curve.demote()
        self.assertEqual(j_curve.shape, [(20,)])

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        wedge.make_cylindrical()

        i_curve = wedge.extract([(0, -1, 0, 0)])
        self.assertEqual(i_curve.shape, [(30, 1)])
        i_curve.demote()
        self.assertEqual(i_curve.shape, [(30,)])

        j_curve = wedge.extract([(0, 0, 0, -1)])
        self.assertEqual(j_curve.shape, [(1, 20)])
        j_curve.demote()
        self.assertEqual(j_curve.shape, [(20,)])

        assert_raises(self, 'FlowSolution().demote()', globals(), locals(),
                      RuntimeError, 'FlowSolution is empty!')

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        assert_raises(self, 'wedge.xyzzy.flow_solution.demote()',
                      globals(), locals(),
                      RuntimeError, 'No i, j, or k plane to collapse')
        assert_raises(self, 'wedge.xyzzy.grid_coordinates.demote()',
                      globals(), locals(),
                      RuntimeError, 'No i, j, or k plane to collapse')

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        assert_raises(self, 'wedge.xyzzy.flow_solution.demote()',
                      globals(), locals(),
                      RuntimeError, 'No i or j plane to collapse')
        assert_raises(self, 'wedge.xyzzy.grid_coordinates.demote()',
                      globals(), locals(),
                      RuntimeError, 'No i or j plane to collapse')

        curve = create_curve_2d(20, 0.5, 30.)
        assert_raises(self, 'curve.xyzzy.flow_solution.demote()',
                      globals(), locals(),
                      RuntimeError, 'FlowSolution is 1D')
        assert_raises(self, 'curve.xyzzy.grid_coordinates.demote()',
                      globals(), locals(),
                      RuntimeError, 'Vector is 1D')
예제 #24
0
    def test_errors(self):
        logging.debug('')
        logging.debug('test_errors')

        wedge = create_wedge_3d((30, 20, 100), 5., 0.5, 2., 30.)

        regions = (('xyzzy',),)
        variables = (('area', 'inch**2'),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), ValueError,
                      "region specification 1 invalid: ('xyzzy',)")

        regions = (('no-such-zone', 2, 2, 0, -1, 0, -1),)
        variables = (('area', 'inch**2'),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), ValueError,
                      "region 1: Domain does not contain zone 'no-such-zone'")

        regions = (('xyzzy', -200, 2, 0, -1),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), ValueError,
                      'region 1: index dimensionality mismatch')

        regions = (('xyzzy', -200, 2, 0, -1, 0, -1),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), ValueError,
                      'region 1: imin -170 invalid (max 30)')

        regions = (('xyzzy', 2, 200, 0, -1, 0, -1),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), ValueError,
                      'region 1: imax 200 invalid (max 30)')

        regions = (('xyzzy', 2, 2, -200, -1, 0, -1),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), ValueError,
                      'region 1: jmin -180 invalid (max 20)')

        regions = (('xyzzy', 2, 2, 0, 200, 0, -1),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), ValueError,
                      'region 1: jmax 200 invalid (max 20)')

        regions = (('xyzzy', 2, 2, 0, -1, -200, -1),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), ValueError,
                      'region 1: kmin -100 invalid (max 100)')

        regions = (('xyzzy', 2, 2, 0, -1, 0, 200),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), ValueError,
                      'region 1: kmax 200 invalid (max 100)')

        regions = (('xyzzy', 2, 2, 0, -1, 0, -1),)
        variables = (('no-such-variable', 'inch**2'),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), ValueError,
                      "Unsupported variable 'no-such-variable'")

        regions = (('xyzzy', 2, 2, 0, -1, 0, -1),
                   ('xyzzy', 3, 3, 0, -1, 0, -1))
        variables = (('pressure', 'inch**2'),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), RuntimeError,
                      "Zone 'xyzzy' used more than once")

        regions = (('xyzzy', 2, 2, 0, -1, 0, -1),)
        variables = (('area', 'inch**2'),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables, "scheme")',
                      globals(), locals(), ValueError,
                      "Unknown/unsupported weighting scheme 'scheme'")

        wedge.reference_state = None
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), ValueError,
                      'No zone or domain reference_state dictionary supplied'
                      ' for zone xyzzy.')

        wedge.reference_state = {'dummy': 42}
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), AttributeError, "For area,"
                      " reference_state is missing 'length_reference'.")

        variables = (('mass_flow', 'lbm/s'),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), AttributeError, "For mass_flow,"
                      " reference_state is missing one or more of"
                      " ('length_reference', 'pressure_reference',"
                      " 'ideal_gas_constant', 'temperature_reference').")

        variables = (('corrected_mass_flow', 'lbm/s'),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), AttributeError, "For corrected_mass"
                      "_flow, zone xyzzy is missing one or more of"
                      " ('density', 'momentum', 'pressure').")

        variables = (('pressure', 'psi'),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), NotImplementedError,
                      'Get dimensional pressure from Q variables')

        variables = (('pressure_stagnation', 'psi'),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), AttributeError, "For pressure"
                      "_stagnation, reference_state is missing one or more of"
                      " ('pressure_reference', 'ideal_gas_constant',"
                      " 'temperature_reference', 'specific_heat_ratio').")

        variables = (('temperature', 'degR'),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), AttributeError, "For temperature,"
                      " reference_state is missing one or more of"
                      " ('pressure_reference', 'ideal_gas_constant',"
                      " 'temperature_reference').")

        variables = (('temperature_stagnation', 'degR'),)
        assert_raises(self, 'mesh_probe(wedge, regions, variables)',
                      globals(), locals(), AttributeError, "For temperature"
                      "_stagnation, reference_state is missing one or more of"
                      " ('pressure_reference', 'ideal_gas_constant',"
                      " 'temperature_reference', 'specific_heat_ratio').")
예제 #25
0
    def test_extend(self):
        logging.debug('')
        logging.debug('test_extend')
        logger = logging.getLogger()

        # Create vanilla 3D wedge.
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        self.assertEqual(wedge.xyzzy.shape, (30, 20, 10))
        self.assertEqual(wedge.xyzzy.flow_solution.shape, (30, 20, 10))

        # Extend for ghost planes.
        domain = wedge.extend([('i', +1., 2, 1)])
        zone = domain.xyzzy
        self.assertEqual(zone.shape, (32, 20, 10))
        self.assertEqual(zone.flow_solution.shape, (31, 20, 10))
        zone = zone.extend('i', -1., 3, 1)
        self.assertEqual(zone.shape, (35, 20, 10))
        self.assertEqual(zone.flow_solution.shape, (32, 20, 10))
        zone = zone.extend('j', +1., 2, 1)
        self.assertEqual(zone.shape, (35, 22, 10))
        self.assertEqual(zone.flow_solution.shape, (32, 21, 10))
        zone = zone.extend('j', -1., 3, 1)
        self.assertEqual(zone.shape, (35, 25, 10))
        self.assertEqual(zone.flow_solution.shape, (32, 22, 10))
        zone = zone.extend('k', +1., 2, 1)
        self.assertEqual(zone.shape, (35, 25, 12))
        self.assertEqual(zone.flow_solution.shape, (32, 22, 11))
        zone = zone.extend('k', -1., 3, 1)
        self.assertEqual(zone.shape, (35, 25, 15))
        self.assertEqual(zone.flow_solution.shape, (32, 22, 12))
        self.assertEqual(zone.grid_coordinates.shape, (35, 25, 15))

        # Uncomment to visualize result.
        # Note that unless you fix the flow extensions above to match the grid
        # extensions the flow will have strange artifacts.
#        write_plot3d_q(zone, 'ghost_wedge.xyz', 'ghost_wedge.q')

        zone.grid_coordinates.ghosts = (3, 2, 3, 2, 3, 2)
        self.assertEqual(zone.grid_coordinates.shape, (30, 20, 10))
        zone.flow_solution.ghosts = (1, 1, 1, 1, 1, 1)
        self.assertEqual(zone.flow_solution.shape, (30, 20, 10))

        # Extract to no-ghosts zone and show equivalent to original.
        zone2 = zone.extract(0, -1, 0, -1, 0, -1,
                             grid_ghosts=(0, 0, 0, 0, 0, 0),
                             flow_ghosts=(0, 0, 0, 0, 0, 0))
        self.assertEqual(zone2.shape, (30, 20, 10))
        self.assertEqual(zone2.flow_solution.shape, (30, 20, 10))
        self.assertTrue(zone2.is_equivalent(wedge.xyzzy, logger))

        # Write out with ghosts in place. Read and show equivalent to original.
        try:
            write_plot3d_q(zone, 'zone_3d.xyz', 'zone_3d.q')
            domain = read_plot3d_q('zone_3d.xyz', 'zone_3d.q', multiblock=False)
            self.assertTrue(domain.zone_1.is_equivalent(wedge.xyzzy, logger))
        finally:
            for name in ('zone_3d.xyz', 'zone_3d.q'):
                if os.path.exists(name):
                    os.remove(name)

        # Create vanilla 2D wedge.
        wedge = create_wedge_2d((20, 10), 0.5, 2., 30.)
        self.assertEqual(wedge.xyzzy.shape, (20, 10))
        self.assertEqual(wedge.xyzzy.flow_solution.shape, (20, 10))

        # Extend for ghost planes.
        zone = wedge.xyzzy.extend('i', +1., 2, 1)
        self.assertEqual(zone.shape, (22, 10))
        self.assertEqual(zone.flow_solution.shape, (21, 10))
        zone = zone.extend('i', -1., 3, 1)
        self.assertEqual(zone.shape, (25, 10))
        self.assertEqual(zone.flow_solution.shape, (22, 10))
        zone = zone.extend('j', +1., 2, 1)
        self.assertEqual(zone.shape, (25, 12))
        self.assertEqual(zone.flow_solution.shape, (22, 11))
        zone = zone.extend('j', -1., 3, 1)
        self.assertEqual(zone.shape, (25, 15))
        self.assertEqual(zone.flow_solution.shape, (22, 12))

        # Uncomment to visualize result.
        # Note that unless you fix the flow extensions above to match the grid
        # extensions the flow will have strange artifacts.
#        write_plot3d_q(zone, 'ghost_sector.xyz', 'ghost_sector.q')

        zone.grid_coordinates.ghosts = (3, 2, 3, 2)
        self.assertEqual(zone.grid_coordinates.shape, (20, 10))
        zone.flow_solution.ghosts = (1, 1, 1, 1)
        self.assertEqual(zone.flow_solution.shape, (20, 10))
        write_plot3d_q(wedge, 'zone_2d.xyz', 'zone_2d.q')

        # Extract to no-ghosts zone and show equivalent to original.
        zone2 = zone.extract(0, -1, 0, -1,
                             grid_ghosts=(0, 0, 0, 0, 0, 0),
                             flow_ghosts=(0, 0, 0, 0, 0, 0))
        self.assertEqual(zone2.shape, (20, 10))
        self.assertEqual(zone2.flow_solution.shape, (20, 10))
        self.assertTrue(zone2.is_equivalent(wedge.xyzzy, logger))

        # Write out with ghosts in place. Read and show equivalent to original.
        try:
            write_plot3d_q(zone, 'zone_2d.xyz', 'zone_2d.q')
            domain = read_plot3d_q('zone_2d.xyz', 'zone_2d.q',
                                   dim=2, multiblock=False)
            self.assertTrue(domain.zone_1.is_equivalent(wedge.xyzzy, logger))
        finally:
            for name in ('zone_2d.xyz', 'zone_2d.q'):
                if os.path.exists(name):
                    os.remove(name)

        # Create vanilla 2D curve.
        curve = create_curve_2d(20, 0.5, 30.)
        self.assertEqual(curve.xyzzy.shape, (20,))
        self.assertEqual(curve.xyzzy.flow_solution.shape, (20,))

        # Extend for ghost planes.
        zone = curve.xyzzy.extend('i', +1., 2, 1)
        self.assertEqual(zone.shape, (22,))
        self.assertEqual(zone.flow_solution.shape, (21,))
        zone = zone.extend('i', -1., 3, 1)
        self.assertEqual(zone.shape, (25,))
        self.assertEqual(zone.flow_solution.shape, (22,))

        zone.grid_coordinates.ghosts = (3, 2)
        self.assertEqual(zone.grid_coordinates.shape, (20,))
        zone.flow_solution.ghosts = (1, 1)
        self.assertEqual(zone.flow_solution.shape, (20,))

        # Extract to no-ghosts zone and show equivalent to original.
        zone = zone.extract(0, -1,
                            grid_ghosts=(0, 0, 0, 0, 0, 0),
                            flow_ghosts=(0, 0, 0, 0, 0, 0))
        self.assertEqual(zone.shape, (20,))
        self.assertEqual(zone.flow_solution.shape, (20,))
        self.assertTrue(zone.is_equivalent(curve.xyzzy, logger))

        # No-op extend.
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        domain = wedge.extend([('i', +1., 0, 0)])
        self.assertTrue(domain.is_equivalent(wedge, logger))

        assert_raises(self, "wedge.xyzzy.flow_solution.extend('i', 0., 10)",
                      globals(), locals(), ValueError, 'delta must be non-zero')
        assert_raises(self, "wedge.xyzzy.grid_coordinates.extend('i', 0., 10)",
                      globals(), locals(), ValueError, 'delta must be non-zero')
        assert_raises(self, "wedge.xyzzy.flow_solution.momentum.extend('i', 0., 10)",
                      globals(), locals(), ValueError, 'delta must be non-zero')

        assert_raises(self, "wedge.xyzzy.flow_solution.extend('i', 1., 0)",
                      globals(), locals(), ValueError, 'npoints must be >= 1')
        assert_raises(self, "wedge.xyzzy.grid_coordinates.extend('i', 1., 0)",
                      globals(), locals(), ValueError, 'npoints must be >= 1')
        assert_raises(self, "wedge.xyzzy.flow_solution.momentum.extend('i', 1., 0)",
                      globals(), locals(), ValueError, 'npoints must be >= 1')

        assert_raises(self, "wedge.xyzzy.flow_solution.extend('l', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i, j, or k')
        assert_raises(self, "wedge.xyzzy.grid_coordinates.extend('l', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i, j, or k')
        assert_raises(self, "wedge.xyzzy.flow_solution.momentum.extend('l', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i, j, or k')

        wedge = create_wedge_2d((30, 20), 0.5, 2., 30.)
        assert_raises(self, "wedge.xyzzy.flow_solution.extend('k', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i or j')
        assert_raises(self, "wedge.xyzzy.grid_coordinates.extend('k', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i or j')
        assert_raises(self, "wedge.xyzzy.flow_solution.momentum.extend('k', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i or j')

        curve = create_curve_2d(20, 0.5, 30.)
        assert_raises(self, "curve.xyzzy.flow_solution.extend('j', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i')
        assert_raises(self, "curve.xyzzy.grid_coordinates.extend('j', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i')
        assert_raises(self, "curve.xyzzy.flow_solution.momentum.extend('j', 1., 10)",
                      globals(), locals(), ValueError, 'axis must be i')

        assert_raises(self, "FlowSolution().extend('j', 1., 10)",
                      globals(), locals(), RuntimeError, 'FlowSolution is empty!')
        assert_raises(self, "GridCoordinates().extend('j', 1., 10)",
                      globals(), locals(), RuntimeError, 'Grid is empty!')
        assert_raises(self, "Vector().extend('j', 1., 10)",
                      globals(), locals(), RuntimeError, 'Vector is empty!')
예제 #26
0
    def test_q_3d(self):
        logging.debug('')
        logging.debug('test_q_3d')

        logger = logging.getLogger()
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)

        # Big-endian binary.
        write_plot3d_q(wedge,
                       'be-binary.xyz',
                       'be-binary.q',
                       logger=logger,
                       big_endian=True,
                       unformatted=False)
        domain = read_plot3d_q('be-binary.xyz',
                               'be-binary.q',
                               logger=logger,
                               multiblock=False,
                               big_endian=True,
                               unformatted=False)
        self.assertFalse(domain.is_equivalent(wedge, logger=logger))
        domain.rename_zone('xyzzy', domain.zone_1)
        self.assertTrue(domain.is_equivalent(wedge, logger=logger))

        # Little-endian unformatted.
        write_plot3d_q(domain,
                       'unformatted.xyz',
                       'unformatted.q',
                       logger=logger)
        domain = read_plot3d_q('unformatted.xyz',
                               'unformatted.q',
                               logger=logger,
                               multiblock=False)
        self.assertFalse(domain.is_equivalent(wedge, logger=logger))
        domain.rename_zone('xyzzy', domain.zone_1)
        self.assertTrue(domain.is_equivalent(wedge, logger=logger))

        # Multiblock.
        wedge2 = create_wedge_3d((29, 19, 9), 5., 2.5, 4., 30.)
        domain.add_domain(wedge2)
        write_plot3d_q(domain,
                       'unformatted.xyz',
                       'unformatted.q',
                       logger=logger)
        domain = read_plot3d_q('unformatted.xyz',
                               'unformatted.q',
                               logger=logger)

        shape = read_plot3d_shape('unformatted.xyz', logger=logger)
        self.assertEqual(shape, [(30, 20, 10), (29, 19, 9)])

        # Errors.
        try:
            read_plot3d_q('unformatted.xyz',
                          'unformatted.q',
                          blanking=True,
                          logger=logger,
                          multiblock=False)
        except NotImplementedError as exc:
            self.assertEqual(str(exc), 'blanking not supported yet')
        else:
            self.fail('Expected NotImplementedError')

        try:
            read_plot3d_q('unformatted.xyz',
                          'unformatted.q',
                          planes=True,
                          logger=logger,
                          multiblock=False)
        except NotImplementedError as exc:
            self.assertEqual(str(exc), 'planar format not supported yet')
        else:
            self.fail('Expected NotImplementedError')

        assert_raises(self, "write_plot3d_q(logger, 'u.xyz', 'u.q')",
                      globals(), locals(), TypeError,
                      "'domain' argument must be a DomainObj or Zone")

        assert_raises(self, "write_plot3d_f(logger, 'u.xyz', 'u.f')",
                      globals(), locals(), TypeError,
                      "'domain' argument must be a DomainObj or Zone")

        assert_raises(self, "write_plot3d_grid(logger, 'u.xyz')", globals(),
                      locals(), TypeError,
                      "'domain' argument must be a DomainObj or Zone")

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        delattr(wedge.xyzzy.flow_solution, 'mach')
        assert_raises(self, "write_plot3d_q(wedge, 'u.xyz', 'u.q')", globals(),
                      locals(), AttributeError,
                      "zone xyzzy flow_solution is missing ['mach']")

        assert_raises(self,
                      "write_plot3d_f(wedge, 'u.xyz', 'u.f', ['froboz'])",
                      globals(), locals(), AttributeError,
                      "zone xyzzy flow_solution is missing ['froboz']")
예제 #27
0
    def test_vector(self):
        logging.debug('')
        logging.debug('test_vector')

        logger = logging.getLogger()

        vec = Vector()
        self.assertEqual(vec.x, None)
        self.assertEqual(vec.y, None)
        self.assertEqual(vec.z, None)
        self.assertEqual(vec.r, None)
        self.assertEqual(vec.t, None)
        self.assertEqual(vec.shape, ())

        self.assertFalse(vec.is_equivalent([], 'vec', logger))

        assert_raises(self, 'vec.flip_z()', globals(), locals(),
                      AttributeError, 'flip_z: no Z component')

        assert_raises(self, 'vec.rotate_about_x(0.)', globals(), locals(),
                      AttributeError, 'rotate_about_x: no Y component')

        assert_raises(self, 'vec.rotate_about_y(0.)', globals(), locals(),
                      AttributeError, 'rotate_about_y: no X component')

        assert_raises(self, 'vec.rotate_about_z(0.)', globals(), locals(),
                      AttributeError, 'rotate_about_z: no X component')

        wedge = create_wedge_2d((20, 10), 0.5, 2., 30.)
        vec = wedge.xyzzy.flow_solution.momentum
        assert_raises(self, 'vec.rotate_about_x(0.)', globals(), locals(),
                      AttributeError, 'rotate_about_x: no Z component')

        assert_raises(self, 'vec.rotate_about_y(0.)', globals(), locals(),
                      AttributeError, 'rotate_about_y: no Z component')

        wedge.make_cylindrical()

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        grid = wedge.xyzzy.grid_coordinates
        grid.make_cylindrical(axis='z')
        vec = wedge.xyzzy.flow_solution.momentum
        assert_raises(self, "vec.make_cylindrical(grid, axis='q')", globals(),
                      locals(), ValueError, "axis must be 'z' or 'x'")
        assert_raises(self, "vec.make_cartesian(grid, axis='q')", globals(),
                      locals(), ValueError, "axis must be 'z' or 'x'")
        grid.make_cartesian(axis='z')

        domain = wedge.copy()
        domain.xyzzy.flow_solution.momentum.z += 1.
        self.assertFalse(domain.is_equivalent(wedge, logger))
        self.assertFalse(domain.is_equivalent(wedge, logger,
                                              tolerance=0.00001))

        domain = wedge.copy()
        grid = domain.xyzzy.grid_coordinates
        grid.make_cylindrical(axis='z')
        vec = domain.xyzzy.flow_solution.momentum
        vec.make_cylindrical(grid)
        self.assertFalse(
            vec.is_equivalent(wedge.xyzzy.flow_solution.momentum, 'momentum',
                              logger))
예제 #28
0
    def test_q_3d(self):
        logging.debug('')
        logging.debug('test_q_3d')

        logger = logging.getLogger()
        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)

        # Big-endian binary.
        write_plot3d_q(wedge, 'be-binary.xyz', 'be-binary.q', logger=logger,
                       big_endian=True, unformatted=False)
        domain = read_plot3d_q('be-binary.xyz', 'be-binary.q', logger=logger,
                               multiblock=False, big_endian=True,
                               unformatted=False)
        self.assertFalse(domain.is_equivalent(wedge, logger=logger))
        domain.rename_zone('xyzzy', domain.zone_1)
        self.assertTrue(domain.is_equivalent(wedge, logger=logger))

        # Little-endian unformatted.
        write_plot3d_q(domain, 'unformatted.xyz', 'unformatted.q',
                       logger=logger)
        domain = read_plot3d_q('unformatted.xyz', 'unformatted.q',
                               logger=logger, multiblock=False)
        self.assertFalse(domain.is_equivalent(wedge, logger=logger))
        domain.rename_zone('xyzzy', domain.zone_1)
        self.assertTrue(domain.is_equivalent(wedge, logger=logger))

        # Multiblock.
        wedge2 = create_wedge_3d((29, 19, 9), 5., 2.5, 4., 30.)
        domain.add_domain(wedge2)
        write_plot3d_q(domain, 'unformatted.xyz', 'unformatted.q',
                       logger=logger)
        domain = read_plot3d_q('unformatted.xyz', 'unformatted.q',
                               logger=logger)

        shape = read_plot3d_shape('unformatted.xyz', logger=logger)
        self.assertEqual(shape, [(30, 20, 10), (29, 19, 9)])

        # Errors.
        try:
            read_plot3d_q('unformatted.xyz', 'unformatted.q', blanking=True,
                          logger=logger, multiblock=False)
        except NotImplementedError as exc:
            self.assertEqual(str(exc), 'blanking not supported yet')
        else:
            self.fail('Expected NotImplementedError')

        try:
            read_plot3d_q('unformatted.xyz', 'unformatted.q', planes=True,
                          logger=logger, multiblock=False)
        except NotImplementedError as exc:
            self.assertEqual(str(exc), 'planar format not supported yet')
        else:
            self.fail('Expected NotImplementedError')

        assert_raises(self, "write_plot3d_q(logger, 'u.xyz', 'u.q')",
                      globals(), locals(), TypeError,
                      "'domain' argument must be a DomainObj or Zone")

        assert_raises(self, "write_plot3d_f(logger, 'u.xyz', 'u.f')",
                      globals(), locals(), TypeError,
                      "'domain' argument must be a DomainObj or Zone")

        assert_raises(self, "write_plot3d_grid(logger, 'u.xyz')",
                      globals(), locals(), TypeError,
                      "'domain' argument must be a DomainObj or Zone")

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        delattr(wedge.xyzzy.flow_solution, 'mach')
        assert_raises(self, "write_plot3d_q(wedge, 'u.xyz', 'u.q')",
                      globals(), locals(), AttributeError,
                      "zone xyzzy flow_solution is missing ['mach']")

        assert_raises(self, "write_plot3d_f(wedge, 'u.xyz', 'u.f', ['froboz'])",
                      globals(), locals(), AttributeError,
                      "zone xyzzy flow_solution is missing ['froboz']")
예제 #29
0
    def test_vector(self):
        logging.debug('')
        logging.debug('test_vector')

        logger = logging.getLogger()

        vec = Vector()
        self.assertEqual(vec.x, None)
        self.assertEqual(vec.y, None)
        self.assertEqual(vec.z, None)
        self.assertEqual(vec.r, None)
        self.assertEqual(vec.t, None)
        self.assertEqual(vec.shape, ())

        self.assertFalse(vec.is_equivalent([], 'vec', logger))

        assert_raises(self, 'vec.flip_z()', globals(), locals(),
                      AttributeError, 'flip_z: no Z component')

        assert_raises(self, 'vec.rotate_about_x(0.)', globals(), locals(),
                      AttributeError, 'rotate_about_x: no Y component')

        assert_raises(self, 'vec.rotate_about_y(0.)', globals(), locals(),
                      AttributeError, 'rotate_about_y: no X component')

        assert_raises(self, 'vec.rotate_about_z(0.)', globals(), locals(),
                      AttributeError, 'rotate_about_z: no X component')

        wedge = create_wedge_2d((20, 10), 0.5, 2., 30.)
        vec = wedge.xyzzy.flow_solution.momentum
        assert_raises(self, 'vec.rotate_about_x(0.)', globals(), locals(),
                      AttributeError, 'rotate_about_x: no Z component')

        assert_raises(self, 'vec.rotate_about_y(0.)', globals(), locals(),
                      AttributeError, 'rotate_about_y: no Z component')

        wedge.make_cylindrical()

        wedge = create_wedge_3d((30, 20, 10), 5., 0.5, 2., 30.)
        grid = wedge.xyzzy.grid_coordinates
        grid.make_cylindrical(axis='z')
        vec = wedge.xyzzy.flow_solution.momentum
        assert_raises(self, "vec.make_cylindrical(grid, axis='q')",
                      globals(), locals(), ValueError,
                      "axis must be 'z' or 'x'")
        assert_raises(self, "vec.make_cartesian(grid, axis='q')",
                      globals(), locals(), ValueError,
                      "axis must be 'z' or 'x'")
        grid.make_cartesian(axis='z')

        domain = wedge.copy()
        domain.xyzzy.flow_solution.momentum.z += 1.
        self.assertFalse(domain.is_equivalent(wedge, logger))
        self.assertFalse(domain.is_equivalent(wedge, logger, tolerance=0.00001))

        domain = wedge.copy()
        grid = domain.xyzzy.grid_coordinates
        grid.make_cylindrical(axis='z')
        vec = domain.xyzzy.flow_solution.momentum
        vec.make_cylindrical(grid)
        self.assertFalse(vec.is_equivalent(wedge.xyzzy.flow_solution.momentum,
                                           'momentum', logger))