Esempio n. 1
0
    def test_spatial_operator(self):
        mesh = np.linspace(0, 1, 11)
        x = fv.fields.Domain(mesh)

        c = fv.fields.Field1D('c', x)
        c.set_field(np.ones(10))

        q = fv.fields.Field1D('q', x)
        q.set_field(np.zeros(10))

        fa = afx.AdvectiveFlux1D()
        fa.set_advection_velocity(c)

        fd = dfx.DiffusiveFlux1D()
        fd.set_diffusion_coefficient(0.5)

        eq = equationclass.Equation()
        eq.add_flux_term(fa)
        eq.add_flux_term(fd)

        dq = eq.spatial_operator(q)

        dq_test = fa.apply(q) + fd.apply(q)
        dq_test = np.diff(dq_test) / x.dxh

        assert np.all(dq == dq_test)

        return
Esempio n. 2
0
    def test_step(self):
        mesh = np.linspace(0, 1, 11)
        x = fv.fields.Domain(mesh)

        c = fv.fields.Field1D('c', x)
        c.set_field(np.ones(10))

        q = fv.fields.Field1D('q', x)
        q.set_field(np.zeros(10))
        assert (type(q) == fv.fields.Field1D)

        fa = afx.AdvectiveFlux1D()
        fa.set_advection_velocity(c)

        fd = dfx.DiffusiveFlux1D()
        fd.set_diffusion_coefficient(0.5)

        eq = equationclass.Equation()
        eq.set_variable(q)
        eq.set_time_integration(ODEintegrators.EulerForward1)
        eq.add_flux_term(fa)
        eq.add_flux_term(fd)

        r = q.copy()

        dr = ODEintegrators.EulerForward1(0.1, r, eq.spatial_operator)
        r.update(dr)

        eq.step(0.1)

        assert np.all(q.val == r.val)

        return
Esempio n. 3
0
    def test_set_variable(self):
        mesh = np.linspace(0, 1, 11)
        x = fv.fields.Domain(mesh)

        q = fv.fields.Field1D('q', x)
        q.set_field(np.ones(10))

        eq = equationclass.Equation()
        eq.set_variable(q)

        assert eq.q is q
        assert eq.mesh is q.mesh

        return
Esempio n. 4
0
    def test_add_flux_term(self):
        fa = afx.AdvectiveFlux1D()
        fd = dfx.DiffusiveFlux1D()

        eq = equationclass.Equation()
        eq.add_flux_term(fa)

        assert len(eq.flux_terms) == 1
        assert fa in eq.flux_terms

        eq.add_flux_term(fd)

        assert len(eq.flux_terms) == 2
        assert fa in eq.flux_terms
        assert fd in eq.flux_terms

        return
Esempio n. 5
0
 def test_time_integration(self):
     eq = equationclass.Equation()
     eq.set_time_integration(ODEintegrators.EulerForward1)
     assert eq.time_stepper == ODEintegrators.EulerForward1
     return
Esempio n. 6
0
 def test_init(self):
     eq = equationclass.Equation()
     assert eq.flux_terms == []
     return
Esempio n. 7
0
#set initial solution
u_0 = np.asarray([ufunc(t, x0, nu) for x0 in x.xp])

u.set_field(u_0)

print('cfl  =', max(u_0) * dt / dx)
print('dif# =', nu * dt / (dx * dx))
print('Pe   =', max(u_0) * dx / nu)

fluxi = afs.QUICK3()
fluxi.set_advection_velocity(u)

# fluxi = afc.REAFlux1D()
# fluxi.set_reconstruction( rc.minmod2() )
# fluxi.set_evolution( ev.Upwind1() )
# fluxi.set_advection_velocity( u )

fluxv = dfs.CDS2()
fluxv.set_diffusion_coefficient(nu)

bgrs = equationclass.Equation()
bgrs.add_flux_term(fluxi)
bgrs.add_flux_term(fluxv)
bgrs.set_time_integration(ODEintegrators.RungeKutta4)

# timestepping
for n in range(nt):
    bgrs.step(u, dt)

u.plot_history()