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

        logger = logging.getLogger()
        wedge = create_wedge_2d((20, 10), 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,
                               dim=2, 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, dim=2, 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))
예제 #2
0
    def test_q_2d(self):
        logging.debug('')
        logging.debug('test_q_2d')

        logger = logging.getLogger()
        wedge = create_wedge_2d((20, 10), 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,
                               dim=2,
                               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,
                               dim=2,
                               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))
예제 #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_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']")
예제 #5
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!')
예제 #6
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!')
예제 #7
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']")