Пример #1
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))
Пример #2
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))