def test_f_2d(self): logging.debug('') logging.debug('test_f_2d') logger = logging.getLogger() wedge = create_wedge_2d((20, 10), 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, dim=2, 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.energy_stagnation_density).all()) # Little-endian unformatted. write_plot3d_f(domain, 'unformatted.xyz', 'unformatted.f', logger=logger) varnames = ('density', 'momentum_x') domain = read_plot3d_f('unformatted.xyz', 'unformatted.f', varnames, logger=logger, dim=2, multiblock=False) test_flow = domain.zone_1.flow_solution self.assertTrue((test_flow.density == wedge_flow.density).all()) self.assertTrue((test_flow.momentum_x == wedge_flow.momentum.x).all()) self.assertTrue((test_flow.f_3 == wedge_flow.momentum.y).all()) self.assertTrue((test_flow.f_4 == wedge_flow.energy_stagnation_density).all())
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))
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')
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')
def test_f_2d(self): logging.debug('') logging.debug('test_f_2d') logger = logging.getLogger() wedge = create_wedge_2d((20, 10), 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, dim=2, 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.energy_stagnation_density).all()) # Little-endian unformatted. write_plot3d_f(domain, 'unformatted.xyz', 'unformatted.f', logger=logger) varnames = ('density', 'momentum_x') domain = read_plot3d_f('unformatted.xyz', 'unformatted.f', varnames, logger=logger, dim=2, multiblock=False) test_flow = domain.zone_1.flow_solution self.assertTrue((test_flow.density == wedge_flow.density).all()) self.assertTrue((test_flow.momentum_x == wedge_flow.momentum.x).all()) self.assertTrue((test_flow.f_3 == wedge_flow.momentum.y).all()) self.assertTrue( (test_flow.f_4 == wedge_flow.energy_stagnation_density).all())
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')
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!')
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))
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))
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)
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')
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!')
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))
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))
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)