Example #1
0
 def setUp(self):
     config = LBConfig()
     config.init_iters = 0
     config.seed = 0
     config.precision = 'single'
     config.block_size = 8
     config.mem_alignment = 8
     config.lat_nx, config.lat_ny, config.lat_nz = self.lattice_size
     config.logger = DummyLogger()
     config.grid = 'D3Q19'
     config.mode = 'batch'
     self.sim = LBSim(config)
     self.backend = DummyBackend()
Example #2
0
 def setUp(self):
     config = LBConfig()
     config.init_iters = 0
     config.seed = 0
     config.access_pattern = 'AA'
     config.precision = 'single'
     config.block_size = 8
     config.mem_alignment = 8
     # Does not affect behaviour of any of the functions tested here.
     config.lat_nz, config.lat_nx, config.lat_ny = self.size_3d
     config.logger = DummyLogger()
     config.grid = 'D3Q19'
     self.sim = LBSim(config)
     self.backend = DummyBackend()
    def test_2subdomains(self):
        config = LBConfig()
        config.lat_nx = 64
        config.lat_ny = 64
        config.periodic_x = True
        config.periodic_y = True
        config.grid = 'D2Q9'

        geo = LBGeometry2D(config)
        b1 = SubdomainSpec2D((0, 0), (32, 64), envelope_size=1, id_=1)
        b2 = SubdomainSpec2D((32, 0), (32, 64), envelope_size=1, id_=2)

        proc = LBGeometryProcessor([b1, b2], 2, geo)
        proc._connect_subdomains(config)

        cpairs = b1.get_connections(SubdomainSpec2D.X_HIGH, b2.id)
        self.assertEqual(len(cpairs), 3)

        cpairs = b1.get_connections(SubdomainSpec2D.X_LOW, b2.id)
        self.assertTrue(
            self._check_partial_map(
                cpairs, [slice(1, 65)], {
                    vi(-1, -1): np.array([[0]]),
                    vi(-1, 0): np.array([[0], [63]]),
                    vi(-1, 1): np.array([[63]])
                }))

        self.assertTrue(
            self._check_partial_map(cpairs, [slice(0, 1)],
                                    {vi(-1, -1): np.array([[0]])}))

        self.assertTrue(
            self._check_partial_map(cpairs, [slice(65, 66)],
                                    {vi(-1, 1): np.array([[0]])}))
    def test_3subdomains(self):
        config = LBConfig()
        config.lat_nx = 64
        config.lat_ny = 64
        config.periodic_x = True
        config.periodic_y = False
        config.grid = 'D2Q9'

        geo = LBGeometry2D(config)
        b1 = SubdomainSpec2D((0, 0), (32, 64), envelope_size=1, id_=1)
        b2 = SubdomainSpec2D((32, 0), (8, 64), envelope_size=1, id_=2)
        b3 = SubdomainSpec2D((40, 0), (24, 64), envelope_size=1, id_=3)

        proc = LBGeometryProcessor([b1, b2, b3], 2, geo)
        proc._connect_subdomains(config)

        cpair = b1.get_connection(SubdomainSpec2D.X_LOW, b3.id)

        self.assertEqual(cpair.src.dst_full_buf_slice, [slice(1, 63)])
        expected_map = {
            vi(-1, 0): np.array([[0], [63]]),
            vi(-1, 1): np.array([[63]]),
            vi(-1, -1): np.array([[0]])
        }
        _verify_partial_map(self, cpair.src, expected_map)
Example #5
0
 def setUp(self):
     config = LBConfig()
     config.seed = 0
     config.precision = 'single'
     config.block_size = 8
     config.mem_alignment = 8
     # Does not affect behaviour of any of the functions tested here.
     config.lat_nx, config.lat_ny = self.lattice_size
     config.logger = DummyLogger()
     config.grid = 'D2Q9'
     self.sim = LBSim(config)
     self.config = config
     self.backend = DummyBackend()
Example #6
0
    def test_2subdomains(self):
        config = LBConfig()
        config.lat_nx = 64
        config.lat_ny = 64
        config.periodic_x = True
        config.periodic_y = True
        config.grid = 'D2Q9'

        geo = LBGeometry2D(config)
        b1 = SubdomainSpec2D((0, 0), (32, 64), envelope_size=1, id_=1)
        b2 = SubdomainSpec2D((32, 0), (32, 64), envelope_size=1, id_=2)

        proc = LBGeometryProcessor([b1, b2], 2, geo.gsize)
        proc._connect_subdomains(config)

        cpairs = b1.get_connections(SubdomainSpec2D.X_HIGH, b2.id)
        self.assertEqual(len(cpairs), 3)

        cpairs = b1.get_connections(SubdomainSpec2D.X_LOW, b2.id)
        self.assertTrue(
                self._check_partial_map(cpairs, [slice(1, 65)],
                {vi(-1, -1): np.array([[0]]),
                 vi(-1, 0): np.array([[0], [63]]),
                 vi(-1, 1): np.array([[63]])}))

        self.assertTrue(
            self._check_partial_map(cpairs, [slice(0, 1)],
                {vi(-1, -1): np.array([[0]])}))

        self.assertTrue(
            self._check_partial_map(cpairs, [slice(65, 66)],
                {vi(-1, 1): np.array([[0]])}))
    def test_5subdomains(self):
        config = LBConfig()
        config.lat_nx = 50
        config.lat_ny = 75
        config.periodic_x = True
        config.periodic_y = True
        config.grid = 'D2Q9'

        geo = LBGeometry2D(config)
        b1 = SubdomainSpec2D((0, 0), (25, 25), envelope_size=1, id_=1)
        b2 = SubdomainSpec2D((25, 0), (25, 25), envelope_size=1, id_=2)
        b3 = SubdomainSpec2D((0, 25), (50, 25), envelope_size=1, id_=3)
        b4 = SubdomainSpec2D((0, 50), (25, 25), envelope_size=1, id_=4)
        b5 = SubdomainSpec2D((25, 50), (25, 25), envelope_size=1, id_=5)

        proc = LBGeometryProcessor([b1, b2, b3, b4, b5], 2, geo)
        proc._connect_subdomains(config)

        cpair = b1.get_connection(SubdomainSpec2D.X_LOW, b5.id)
        expected_map = {vi(-1, -1): np.array([[0]])}
        _verify_partial_map(self, cpair.src, expected_map)

        cpair = b1.get_connection(SubdomainSpec2D.X_HIGH, b5.id)
        expected_map = {vi(1, -1): np.array([[0]])}
        _verify_partial_map(self, cpair.src, expected_map)

        cpair = b1.get_connection(SubdomainSpec2D.Y_LOW, b4.id)
        expected_map = {
            vi(0, -1): np.array([[0], [24]]),
            vi(1, -1): np.array([[24]]),
            vi(-1, -1): np.array([[0]])
        }
        _verify_partial_map(self, cpair.src, expected_map)

        cpair = b1.get_connection(SubdomainSpec2D.X_LOW, b2.id)
        self.assertEqual(cpair.src.dst_full_buf_slice, [slice(1, 24)])

        cpair = b1.get_connection(SubdomainSpec2D.X_HIGH, b2.id)
        self.assertEqual(cpair.src.dst_full_buf_slice, [slice(1, 24)])

        cpair = b1.get_connection(SubdomainSpec2D.Y_HIGH, b3.id)
        self.assertEqual(cpair.src.dst_full_buf_slice, [slice(1, 24)])

        cpair = b1.get_connection(SubdomainSpec2D.X_LOW, b3.id)
        self.assertEqual(cpair.src.dst_full_buf_slice, [])
        expected_map = {vi(-1, 1): np.array([[0]])}
        _verify_partial_map(self, cpair.src, expected_map)
Example #8
0
    def test_5subdomains(self):
        config = LBConfig()
        config.lat_nx = 50
        config.lat_ny = 75
        config.periodic_x = True
        config.periodic_y = True
        config.grid = 'D2Q9'

        geo = LBGeometry2D(config)
        b1 = SubdomainSpec2D((0, 0), (25, 25), envelope_size=1, id_=1)
        b2 = SubdomainSpec2D((25, 0), (25, 25), envelope_size=1, id_=2)
        b3 = SubdomainSpec2D((0, 25), (50, 25), envelope_size=1, id_=3)
        b4 = SubdomainSpec2D((0, 50), (25, 25), envelope_size=1, id_=4)
        b5 = SubdomainSpec2D((25, 50), (25, 25), envelope_size=1, id_=5)

        proc = LBGeometryProcessor([b1, b2, b3, b4, b5], 2, geo.gsize)
        proc._connect_subdomains(config)

        cpair = b1.get_connection(SubdomainSpec2D.X_LOW, b5.id)
        expected_map = {vi(-1, -1): np.array([[0]])}
        _verify_partial_map(self, cpair.src, expected_map)

        cpair = b1.get_connection(SubdomainSpec2D.X_HIGH, b5.id)
        expected_map = {vi(1, -1): np.array([[0]])}
        _verify_partial_map(self, cpair.src, expected_map)

        cpair = b1.get_connection(SubdomainSpec2D.Y_LOW, b4.id)
        expected_map = {vi(0, -1): np.array([[0], [24]]),
                        vi(1, -1): np.array([[24]]),
                        vi(-1, -1): np.array([[0]])}
        _verify_partial_map(self, cpair.src, expected_map)

        cpair = b1.get_connection(SubdomainSpec2D.X_LOW, b2.id)
        self.assertEqual(cpair.src.dst_full_buf_slice, [slice(1, 24)])

        cpair = b1.get_connection(SubdomainSpec2D.X_HIGH, b2.id)
        self.assertEqual(cpair.src.dst_full_buf_slice, [slice(1, 24)])

        cpair = b1.get_connection(SubdomainSpec2D.Y_HIGH, b3.id)
        self.assertEqual(cpair.src.dst_full_buf_slice, [slice(1, 24)])

        cpair = b1.get_connection(SubdomainSpec2D.X_LOW, b3.id)
        self.assertEqual(cpair.src.dst_full_buf_slice, [])
        expected_map = {vi(-1, 1): np.array([[0]])}
        _verify_partial_map(self, cpair.src, expected_map)
Example #9
0
    def test_3subdomains(self):
        config = LBConfig()
        config.lat_nx = 64
        config.lat_ny = 64
        config.periodic_x = True
        config.periodic_y = False
        config.grid = 'D2Q9'

        geo = LBGeometry2D(config)
        b1 = SubdomainSpec2D((0, 0), (32, 64), envelope_size=1, id_=1)
        b2 = SubdomainSpec2D((32, 0), (8, 64), envelope_size=1, id_=2)
        b3 = SubdomainSpec2D((40, 0), (24, 64), envelope_size=1, id_=3)

        proc = LBGeometryProcessor([b1, b2, b3], 2, geo.gsize)
        proc._connect_subdomains(config)

        cpair = b1.get_connection(SubdomainSpec2D.X_LOW, b3.id)

        self.assertEqual(cpair.src.dst_full_buf_slice, [slice(1, 63)])
        expected_map = {
            vi(-1, 0): np.array([[0], [63]]),
            vi(-1, 1): np.array([[63]]),
            vi(-1, -1): np.array([[0]])}
        _verify_partial_map(self, cpair.src, expected_map)
Example #10
0
 def setUp(self):
     config = LBConfig()
     config.init_iters = 0
     config.seed = 0
     config.access_pattern = 'AA'
     config.precision = 'single'
     config.block_size = 8
     config.mem_alignment = 8
     config.mode = 'batch'
     # Does not affect behaviour of any of the functions tested here.
     config.lat_nz, config.lat_nx, config.lat_ny = self.size_3d
     config.logger = DummyLogger()
     config.grid = 'D3Q19'
     self.sim = LBSim(config)
     self.backend = DummyBackend()
Example #11
0
    def test_4subdomains(self):
        config = LBConfig()
        config.lat_nx = 64
        config.lat_ny = 64
        config.periodic_x = True
        config.periodic_y = True
        config.grid = 'D2Q9'

        geo = LBGeometry2D(config)
        b1 = SubdomainSpec2D((0, 0), (32, 32), envelope_size=1, id_=1)
        b2 = SubdomainSpec2D((32, 0), (32, 32), envelope_size=1, id_=2)
        b3 = SubdomainSpec2D((0, 32), (32, 32), envelope_size=1, id_=3)
        b4 = SubdomainSpec2D((32, 32), (32, 32), envelope_size=1, id_=4)

        proc = LBGeometryProcessor([b1, b2, b3, b4], 2, geo)
        proc._connect_subdomains(config)

        ## b1 - b4

        cpairs = b1.get_connections(SubdomainSpec2D.X_LOW, b4.id)
        self.assertEqual(len(cpairs), 2)
        self.assertTrue(
            self._check_partial_map(cpairs, [slice(0, 1)],
                                    {vi(-1, -1): np.array([[0]])}))
        self.assertTrue(
            self._check_partial_map(cpairs, [slice(33, 34)],
                                    {vi(-1, 1): np.array([[0]])}))

        cpairs = b1.get_connections(SubdomainSpec2D.X_HIGH, b4.id)
        self.assertEqual(len(cpairs), 2)
        self.assertTrue(
            self._check_partial_map(cpairs, [slice(0, 1)],
                                    {vi(1, -1): np.array([[0]])}))
        self.assertTrue(
            self._check_partial_map(cpairs, [slice(33, 34)],
                                    {vi(1, 1): np.array([[0]])}))

        cpairs = b1.get_connections(SubdomainSpec2D.Y_LOW, b4.id)
        self.assertEqual(len(cpairs), 0)

        cpairs = b1.get_connections(SubdomainSpec2D.Y_HIGH, b4.id)
        self.assertEqual(len(cpairs), 0)

        ### b2 - b3

        cpairs = b2.get_connections(SubdomainSpec2D.X_LOW, b3.id)

        self.assertEqual(len(cpairs), 2)
        self.assertTrue(
            self._check_partial_map(cpairs, [slice(0, 1)],
                                    {vi(-1, -1): np.array([[0]])}))
        self.assertTrue(
            self._check_partial_map(cpairs, [slice(33, 34)],
                                    {vi(-1, 1): np.array([[0]])}))

        cpairs = b2.get_connections(SubdomainSpec2D.X_HIGH, b3.id)
        self.assertEqual(len(cpairs), 2)
        self.assertTrue(
            self._check_partial_map(cpairs, [slice(0, 1)],
                                    {vi(1, -1): np.array([[0]])}))
        self.assertTrue(
            self._check_partial_map(cpairs, [slice(33, 34)],
                                    {vi(1, 1): np.array([[0]])}))

        cpairs = b2.get_connections(SubdomainSpec2D.Y_LOW, b3.id)
        self.assertEqual(len(cpairs), 0)

        cpairs = b2.get_connections(SubdomainSpec2D.Y_HIGH, b3.id)
        self.assertEqual(len(cpairs), 0)
Example #12
0
 def setUp(self):
     config = LBConfig()
     config.seed = 0
     config.init_iters = 0
     config.access_pattern = 'AA'
     config.precision = 'single'
     config.block_size = 8
     config.mem_alignment = 8
     config.lat_nx, config.lat_ny = 40, 80
     config.logger = DummyLogger()
     config.grid = 'D2Q9'
     config.benchmark_sample_from = 0
     config.benchmark_minibatch = 1
     config.bulk_boundary_split = False
     config.output = ''
     self.config = config
     self.backend = DummyBackend()
     self.ctx = zmq.Context()
Example #13
0
    def test_4subdomains(self):
        config = LBConfig()
        config.lat_nx = 64
        config.lat_ny = 64
        config.periodic_x = True
        config.periodic_y = True
        config.grid = 'D2Q9'

        geo = LBGeometry2D(config)
        b1 = SubdomainSpec2D((0, 0), (32, 32), envelope_size=1, id_=1)
        b2 = SubdomainSpec2D((32, 0), (32, 32), envelope_size=1, id_=2)
        b3 = SubdomainSpec2D((0, 32), (32, 32), envelope_size=1, id_=3)
        b4 = SubdomainSpec2D((32, 32), (32, 32), envelope_size=1, id_=4)

        proc = LBGeometryProcessor([b1, b2, b3, b4], 2, geo.gsize)
        proc._connect_subdomains(config)

        ## b1 - b4

        cpairs = b1.get_connections(SubdomainSpec2D.X_LOW, b4.id)
        self.assertEqual(len(cpairs), 2)
        self.assertTrue(
                self._check_partial_map(cpairs, [slice(0, 1)],
                    {vi(-1, -1): np.array([[0]])}))
        self.assertTrue(
                self._check_partial_map(cpairs, [slice(33, 34)],
                    {vi(-1, 1): np.array([[0]])}))

        cpairs = b1.get_connections(SubdomainSpec2D.X_HIGH, b4.id)
        self.assertEqual(len(cpairs), 2)
        self.assertTrue(
                self._check_partial_map(cpairs, [slice(0, 1)],
                    {vi(1, -1): np.array([[0]])}))
        self.assertTrue(
                self._check_partial_map(cpairs, [slice(33, 34)],
                    {vi(1, 1): np.array([[0]])}))

        cpairs = b1.get_connections(SubdomainSpec2D.Y_LOW, b4.id)
        self.assertEqual(len(cpairs), 0)

        cpairs = b1.get_connections(SubdomainSpec2D.Y_HIGH, b4.id)
        self.assertEqual(len(cpairs), 0)

        ### b2 - b3

        cpairs = b2.get_connections(SubdomainSpec2D.X_LOW, b3.id)

        self.assertEqual(len(cpairs), 2)
        self.assertTrue(
                self._check_partial_map(cpairs, [slice(0, 1)],
                    {vi(-1, -1): np.array([[0]])}))
        self.assertTrue(
                self._check_partial_map(cpairs, [slice(33, 34)],
                    {vi(-1, 1): np.array([[0]])}))

        cpairs = b2.get_connections(SubdomainSpec2D.X_HIGH, b3.id)
        self.assertEqual(len(cpairs), 2)
        self.assertTrue(
                self._check_partial_map(cpairs, [slice(0, 1)],
                    {vi(1, -1): np.array([[0]])}))
        self.assertTrue(
                self._check_partial_map(cpairs, [slice(33, 34)],
                    {vi(1, 1): np.array([[0]])}))

        cpairs = b2.get_connections(SubdomainSpec2D.Y_LOW, b3.id)
        self.assertEqual(len(cpairs), 0)

        cpairs = b2.get_connections(SubdomainSpec2D.Y_HIGH, b3.id)
        self.assertEqual(len(cpairs), 0)
Example #14
0
 def setUp(self):
     config = LBConfig()
     config.init_iters = 0
     config.seed = 0
     config.precision = 'single'
     config.block_size = 8
     config.mem_alignment = 8
     config.lat_nx, config.lat_ny, config.lat_nz = self.lattice_size
     config.logger = DummyLogger()
     config.grid = 'D3Q19'
     config.mode = 'batch'
     self.sim = LBSim(config)
     self.backend = DummyBackend()
Example #15
0
    def test_TMS(self):
        settings = {
            'debug_single_process': True,
            'quiet': True,
            'precision': 'double',
            'access_pattern': 'AB',
            'check_invalid_results_gpu': False,
            'check_invalid_results_host': False,
            'lat_nx': self.nx,
            'lat_ny': self.ny,
            'max_iters': 1,
            'visc': 1.0/12.0,
        }

        ctrl = LBSimulationController(Test2DSim, default_config=settings)
        ctrl.run(ignore_cmdline=True)
        runner = ctrl.master.runner
        dist = runner._debug_get_dist()

        rho_bb = 0.0
        ux_bb = 0.0
        uy_bb = 0.0

        for k, v in fi_start_2d.iteritems():
            if D2Q9.basis[k][1] == 1:
                v = fi_start_2d[D2Q9.idx_opposite[k]]

            rho_bb += v
            ux_bb += D2Q9.basis[k][0] * v
            uy_bb += D2Q9.basis[k][1] * v

        ux_bb /= rho_bb
        uy_bb /= rho_bb

        rho = 0.0
        ux = 0.0
        uy = 0.0

        cfg = LBConfig()
        cfg.incompressible = False
        cfg.minimize_roundoff = False
        eq = bgk_equilibrium(D2Q9, cfg).expression

        for k, v in fi_start_2d.iteritems():
            if D2Q9.basis[k][1] == 1:
                v = eq[k].evalf(subs={'g0m0': rho_bb, 'g0m1x': ux_bb,
                                      'g0m1y': uy_bb})

            rho += v
            ux += D2Q9.basis[k][0] * v
            uy += D2Q9.basis[k][1] * v

        ux /= rho
        uy /= rho

        print 'Target values are rho=%e, ux=%e, uy=%e' % (rho_bb, ux_bb, uy_bb)
        print 'Instantaneous values are rho=%e, ux=%e, uy=%e' % (rho, ux, uy)

        fneq = {}

        for k, v in fi_start_2d.iteritems():
            if D2Q9.basis[k][1] == 1:
                fneq[k] = (eq[k].evalf(subs={'g0m0': rho_bb, 'g0m1x': ux_bb, 'g0m1y': uy_bb}) -
                           eq[k].evalf(subs={'g0m0': rho, 'g0m1x': ux, 'g0m1y': uy}))
            else:
                fneq[k] = v - eq[k].evalf(subs={'g0m0': rho, 'g0m1x': ux, 'g0m1y': uy})

        tau = relaxation_time(1.0/12.0)
        omega = 1.0 / tau

        res = {}
        for k, v in fi_start_2d.iteritems():
            if D2Q9.basis[k][1] == 1:
                res[k] = ((1.0 - (omega - 1)) *
                          eq[k].evalf(subs={'g0m0': rho_bb, 'g0m1x': ux_bb, 'g0m1y': uy_bb}) +
                          (omega - 1) * eq[k].evalf(subs={'g0m0': rho, 'g0m1x': ux, 'g0m1y': uy}))
            else:
                res[k] = (v + omega * (eq[k].evalf(subs={'g0m0': rho, 'g0m1x': ux, 'g0m1y': uy}) - v) +
                          eq[k].evalf(subs={'g0m0': rho_bb, 'g0m1x': ux_bb, 'g0m1y': uy_bb}) -
                          eq[k].evalf(subs={'g0m0': rho, 'g0m1x': ux, 'g0m1y': uy}))

        for k, v in res.iteritems():
            np.testing.assert_allclose(dist[k,1,16], np.float64(v))
Example #16
0
 def setUp(self):
     config = LBConfig()
     config.seed = 0
     config.init_iters = 0
     config.access_pattern = 'AA'
     config.precision = 'single'
     config.block_size = 8
     config.mem_alignment = 8
     config.mode = 'batch'
     config.lat_nx, config.lat_ny = 40, 80
     config.logger = DummyLogger()
     config.grid = 'D2Q9'
     config.benchmark_sample_from = 0
     config.benchmark_minibatch = 1
     config.bulk_boundary_split = False
     config.output = ''
     self.config = config
     self.backend = DummyBackend()
     self.ctx = zmq.Context()
Example #17
0
    def test_TMS(self):
        settings = {
            'debug_single_process': True,
            'quiet': True,
            'precision': 'double',
            'access_pattern': 'AB',
            'check_invalid_results_gpu': False,
            'check_invalid_results_host': False,
            'lat_nx': self.nx,
            'lat_ny': self.ny,
            'max_iters': 1,
            'visc': 1.0 / 12.0,
        }

        ctrl = LBSimulationController(Test2DSim, default_config=settings)
        ctrl.run(ignore_cmdline=True)
        runner = ctrl.master.runner
        dist = runner._debug_get_dist()

        rho_bb = 0.0
        ux_bb = 0.0
        uy_bb = 0.0

        for k, v in fi_start_2d.iteritems():
            if D2Q9.basis[k][1] == 1:
                v = fi_start_2d[D2Q9.idx_opposite[k]]

            rho_bb += v
            ux_bb += D2Q9.basis[k][0] * v
            uy_bb += D2Q9.basis[k][1] * v

        ux_bb /= rho_bb
        uy_bb /= rho_bb

        rho = 0.0
        ux = 0.0
        uy = 0.0

        cfg = LBConfig()
        cfg.incompressible = False
        cfg.minimize_roundoff = False
        eq = bgk_equilibrium(D2Q9, cfg).expression

        for k, v in fi_start_2d.iteritems():
            if D2Q9.basis[k][1] == 1:
                v = eq[k].evalf(subs={
                    'g0m0': rho_bb,
                    'g0m1x': ux_bb,
                    'g0m1y': uy_bb
                })

            rho += v
            ux += D2Q9.basis[k][0] * v
            uy += D2Q9.basis[k][1] * v

        ux /= rho
        uy /= rho

        print 'Target values are rho=%e, ux=%e, uy=%e' % (rho_bb, ux_bb, uy_bb)
        print 'Instantaneous values are rho=%e, ux=%e, uy=%e' % (rho, ux, uy)

        fneq = {}

        for k, v in fi_start_2d.iteritems():
            if D2Q9.basis[k][1] == 1:
                fneq[k] = (eq[k].evalf(subs={
                    'g0m0': rho_bb,
                    'g0m1x': ux_bb,
                    'g0m1y': uy_bb
                }) - eq[k].evalf(subs={
                    'g0m0': rho,
                    'g0m1x': ux,
                    'g0m1y': uy
                }))
            else:
                fneq[k] = v - eq[k].evalf(subs={
                    'g0m0': rho,
                    'g0m1x': ux,
                    'g0m1y': uy
                })

        tau = relaxation_time(1.0 / 12.0)
        omega = 1.0 / tau

        res = {}
        for k, v in fi_start_2d.iteritems():
            if D2Q9.basis[k][1] == 1:
                res[k] = ((1.0 - (omega - 1)) * eq[k].evalf(subs={
                    'g0m0': rho_bb,
                    'g0m1x': ux_bb,
                    'g0m1y': uy_bb
                }) + (omega - 1) * eq[k].evalf(subs={
                    'g0m0': rho,
                    'g0m1x': ux,
                    'g0m1y': uy
                }))
            else:
                res[k] = (v + omega * (eq[k].evalf(subs={
                    'g0m0': rho,
                    'g0m1x': ux,
                    'g0m1y': uy
                }) - v) + eq[k].evalf(subs={
                    'g0m0': rho_bb,
                    'g0m1x': ux_bb,
                    'g0m1y': uy_bb
                }) - eq[k].evalf(subs={
                    'g0m0': rho,
                    'g0m1x': ux,
                    'g0m1y': uy
                }))

        for k, v in res.iteritems():
            np.testing.assert_allclose(dist[k, 1, 16], np.float64(v))
Example #18
0
 def setUp(self):
     config = LBConfig()
     config.init_iters = 0
     config.seed = 0
     config.precision = 'single'
     config.block_size = 8
     config.mem_alignment = 8
     config.node_addressing = 'direct'
     config.lat_nx, config.lat_ny = self.lattice_size
     config.logger = DummyLogger()
     config.grid = 'D2Q9'
     config.mode = 'batch'
     config.periodic_x = False
     config.periodic_y = False
     config.use_link_tags = False
     config.time_dependence = False
     config.space_dependence = False
     self.sim = LBSim(config)
     self.config = config
     self.backend = DummyBackend()
Example #19
0
 def setUp(self):
     config = LBConfig()
     config.init_iters = 0
     config.seed = 0
     config.precision = "single"
     config.block_size = 8
     config.mem_alignment = 8
     config.node_addressing = "direct"
     config.lat_nx, config.lat_ny, config.lat_nz = self.lattice_size
     config.logger = DummyLogger()
     config.grid = "D3Q19"
     config.mode = "batch"
     config.periodic_x = False
     config.periodic_y = False
     config.periodic_z = False
     config.use_link_tags = False
     config.time_dependence = False
     config.space_dependence = False
     config.access_pattern = "AB"
     self.sim = LBSim(config)
     self.backend = DummyBackend()
Example #20
0
 def setUp(self):
     config = LBConfig()
     config.init_iters = 0
     config.seed = 0
     config.precision = 'single'
     config.block_size = 8
     config.mem_alignment = 8
     config.node_addressing = 'direct'
     config.lat_nx, config.lat_ny, config.lat_nz = self.lattice_size
     config.logger = DummyLogger()
     config.grid = 'D3Q19'
     config.mode = 'batch'
     config.periodic_x = False
     config.periodic_y = False
     config.periodic_z = False
     config.use_link_tags = False
     config.time_dependence = False
     config.space_dependence = False
     config.access_pattern = 'AB'
     self.sim = LBSim(config)
     self.backend = DummyBackend()