Beispiel #1
0
 def test_init_empty(self):
     f = field.fdata(self.convmodel, self.curmesh, [])
     assert f.time == 0.  # default value
     assert f.it == -1  # default value
     assert f.data == []
     f.set_time(10.)
     assert f.time == 10.
Beispiel #2
0
 def fdata(self, mesh, t=None):
     if t == None:
         xot = np.where(mesh.centers() < 0., -1e6, 1e6)
     else:
         xot = mesh.centers() / t
     q = self.riempb.qsol(xot)
     qcons = self.model.prim2cons([q.rho, q.u, q.p])
     return field.fdata(self.model, mesh, qcons)
Beispiel #3
0
    def test_plotdata_sca(self):
        def fn(x):
            return np.exp(-2 * np.square(x - .5)) * np.sin(20 * (x - .5))

        f = field.fdata(self.convmodel, self.curmesh,
                        [fn(self.curmesh.centers())])
        fig, ax = plt.subplots(1, 1)
        f.plot('q')
        return fig
Beispiel #4
0
 def test_reset(self):
     f = field.fdata(self.convmodel, self.curmesh, [])
     f.set_time(10.)
     f.reset(t=5.)
     assert f.time == 5.
     assert f.it == -1  # default value
     f.reset(it=20)
     assert f.time == 0.  # default value
     assert f.it == 20
Beispiel #5
0
    def fdata(self, mesh, t=None):
        """

        :param mesh: 
        :param t:  (Default value = None)

        """
        qcons = self.consdata(mesh, t)
        return field.fdata(self.model, mesh, qcons)
Beispiel #6
0
 def test_plot2dcontourf(self):
     xc, yc = self.mesh2d.centers()
     f = field.fdata(self.model, self.mesh2d, [
         1.,
         euler.datavector(0., 0.),
         self.fn(np.sqrt(np.square(xc - 8) + np.square(yc - 4)))
     ])
     fig, ax = plt.subplots(1, 1)
     f.contourf('pressure', axes=ax, style='r-')
     return fig
Beispiel #7
0
 def test_append_scalararray(self):
     flist = field.fieldlist()
     f1 = field.fdata(self.convmodel, self.curmesh, [1.])
     flist.append(f1)
     f2 = f1.copy()
     f2.set_time(10.)
     flist.append(f2)
     assert len(flist) == 2
     assert flist[0].time == 0.
     assert flist[-1].time == 10.
     assert flist.time_array() == [0., 10.]
def test_numscheme():
    curmesh = mesh50
    endtime = 1
    cfl     = .5
    tnum    = rk3ssp
    for xnum in [ extrapol1(), extrapol2(), extrapol3(), muscl(minmod), muscl(vanalbada) ]:
        finit = field.fdata(mymodel, curmesh, [ init_sinperk(curmesh, k=5) ] )
        rhs = modeldisc.fvm(mymodel, curmesh, xnum)
        solver = tnum(curmesh, rhs)
        solver.solve(finit, cfl, [endtime])
    assert 1
Beispiel #9
0
 def test_checkend_maxit_noendtime(self):
     endtime = 5.
     cfl = .5
     maxit = 100
     stop_directive = {'maxit': maxit}
     finit = field.fdata(self.convmodel, self.curmesh,
                         [self.init_sinperk(self.curmesh, k=4)])
     rhs = modeldisc.fvm(self.convmodel, self.curmesh, self.xsch)
     solver = tnum.rk4(self.curmesh, rhs)
     fsol = solver.solve(finit, cfl, stop=stop_directive)
     assert len(fsol) == 1  # end before expected by tsave
     assert not fsol[-1].isnan()
     assert solver.nit() == 100
Beispiel #10
0
def test_mesh_refined(lratio):
    lmesh = mesh.refinedmesh(ncell=50, length=1., ratio=2., nratioa=lratio)
    endtime = 5
    cfl = 1.
    # extrapol1(), extrapol2()=extrapolk(1), centered=extrapolk(-1), extrapol3=extrapolk(1./3.)
    xnum = extrapol3()
    # explicit, rk2, rk3ssp, rk4, implicit, trapezoidal=cranknicolson
    tnum = rk3ssp
    finit = field.fdata(mymodel, lmesh, [init_sinperk(lmesh, k=2)])
    rhs = modeldisc.fvm(mymodel, lmesh, xnum)
    solver = tnum(lmesh, rhs)
    fsol = solver.solve(finit, cfl, [endtime])
    assert not fsol[-1].isnan()
Beispiel #11
0
def test_integrators(tnum):
    curmesh = mesh50
    endtime = 1
    cfl     = .8
    # extrapol1(), extrapol2()=extrapolk(1), centered=extrapolk(-1), extrapol3=extrapolk(1./3.)
    xnum = extrapol1()
    # explicit, rk2, rk3ssp, rk4, implicit, trapezoidal=cranknicolson
    finit = field.fdata(mymodel, curmesh, [ init_sinperk(curmesh, k=2) ] )
    rhs = modeldisc.fvm(mymodel, curmesh, xnum)
    solver = tnum(curmesh, rhs)
    fsol = solver.solve(finit, cfl, [endtime])
    assert not fsol[-1].isnan()
    assert fsol[-1].average('q') < 1.e-12
Beispiel #12
0
def test_integrators():
    curmesh = mesh50
    endtime = 1
    cfl     = .8
    # extrapol1(), extrapol2()=extrapolk(1), centered=extrapolk(-1), extrapol3=extrapolk(1./3.)
    xnum = extrapol1()
    # explicit, rk2, rk3ssp, rk4, implicit, trapezoidal=cranknicolson
    for tnum in [ explicit,rk2, rk3ssp, implicit, cranknicolson ]:
        finit = field.fdata(mymodel, curmesh, [ init_sinperk(curmesh, k=2) ] )
        rhs = modeldisc.fvm(mymodel, curmesh, xnum)
        solver = tnum(curmesh, rhs)
        solver.solve(finit, cfl, [endtime])
    assert 1
Beispiel #13
0
def test_wavelength(k):
    curmesh = mesh50
    endtime = 5
    cfl     = .8
    # extrapol1(), extrapol2()=extrapolk(1), centered=extrapolk(-1), extrapol3=extrapolk(1./3.)
    xnum = extrapol1()
    # explicit, rk2, rk3ssp, rk4, implicit, trapezoidal=cranknicolson
    tnum  = explicit
    finit = field.fdata(mymodel, curmesh, [ init_sinperk(curmesh, k=k) ] )
    rhs = modeldisc.fvm(mymodel, curmesh, xnum)
    solver = tnum(curmesh, rhs)
    fsol = solver.solve(finit, cfl, [endtime])
    assert not fsol[-1].isnan()
Beispiel #14
0
 def test_sin_bcper(self):
     endtime = 2.
     cfl     = 0.5
     xnum    = muscl(minmod) 
     tnum    = integ.rk3ssp
     thismesh = self.mesh100
     thisprim = [ self.init_sin(thismesh) ]
     thiscons = field.fdata(self.mymodel, thismesh, thisprim)
     bcL = { 'type': 'per' }
     bcR = { 'type': 'per' }
     rhs = modeldisc.fvm(self.mymodel, thismesh, xnum, bcL=bcL, bcR=bcR)
     solver = tnum(thismesh, rhs)
     fsol = solver.solve(thiscons, cfl, [endtime])
     assert not fsol[-1].isnan()
Beispiel #15
0
 def test_expansion(self):
     endtime = 2.
     cfl     = 0.5
     xnum    = muscl(minmod) 
     tnum    = integ.rk3ssp
     thismesh = self.mesh100
     thisprim = [self.init_step(thismesh, 1., 2.)]
     thiscons = field.fdata(self.mymodel, thismesh, thisprim)
     bcL = { 'type': 'dirichlet', 'prim': thisprim[0]  }
     bcR = { 'type': 'dirichlet', 'prim': thisprim[-1] }
     rhs = modeldisc.fvm(self.mymodel, thismesh, xnum, bcL=bcL, bcR=bcR)
     solver = tnum(thismesh, rhs)
     fsol = solver.solve(thiscons, cfl, [endtime])
     assert not fsol[-1].isnan()
Beispiel #16
0
def test_compression_centered():
    endtime = 2.
    cfl     = .5
    xnum    = muscl(minmod) 
    tnum    = integ.rk3ssp
    thismesh = mesh100
    thisprim = [init_step(thismesh, 2, -1.)]
    thiscons = field.fdata(mymodel, thismesh, thisprim)
    bcL = { 'type': 'dirichlet', 'prim': thisprim[0]  }
    bcR = { 'type': 'dirichlet', 'prim': thisprim[-1] }
    rhs = modeldisc.fvm(mymodel, thismesh, xnum, bcL=bcL, bcR=bcR)
    solver = tnum(thismesh, rhs)
    solver.solve(thiscons, cfl, [endtime])
    assert 1
Beispiel #17
0
 def test_checkend_tottime(self):
     endtime = 5.
     cfl = .5
     stop_directive = {'tottime': endtime}
     finit = field.fdata(self.convmodel, self.curmesh,
                         [self.init_sinperk(self.curmesh, k=4)])
     rhs = modeldisc.fvm(self.convmodel, self.curmesh, self.xsch)
     solver = tnum.rk4(self.curmesh, rhs)
     nsol = 11
     tsave = np.linspace(0, 2 * endtime, nsol, endpoint=True)
     fsol = solver.solve(finit, cfl, tsave, stop=stop_directive)
     assert len(fsol) < nsol  # end before expected by tsave
     assert not fsol[-1].isnan()
     assert fsol[-1].time < 2 * endtime
Beispiel #18
0
 def test_conv_it_perf(self, tmeth):
     endtime = 5
     cfl = .8
     xsch = xnum.extrapol3()
     finit = field.fdata(self.convmodel, self.curmesh,
                         [self.init_sinperk(self.curmesh, k=4)])
     rhs = modeldisc.fvm(self.convmodel, self.curmesh, xsch)
     solver = tmeth(self.curmesh, rhs)
     fsol = solver.solve(finit, cfl, [endtime])
     assert solver.nit() > 300
     assert solver.nit() < 400
     maxperf = 40. if tmeth in tnum.List_Explicit_Integrators else 100.
     assert solver.perf_micros() < maxperf
     assert not fsol[-1].isnan()
Beispiel #19
0
def test_sin_bcper():
    endtime = 2.
    cfl     = 0.5
    xnum    = muscl(minmod) 
    tnum    = integ.rk3ssp
    thismesh = mesh100
    thisprim = [ init_sin(thismesh) ]
    thiscons = field.fdata(mymodel, thismesh, thisprim)
    bcL = { 'type': 'per' }
    bcR = { 'type': 'per' }
    rhs = modeldisc.fvm(mymodel, thismesh, xnum, bcL=bcL, bcR=bcR)
    solver = tnum(thismesh, rhs)
    solver.solve(thiscons, cfl, [endtime])
    assert 1
Beispiel #20
0
    def test_flist_plotxtcontourf(self):
        def fn(x, t):
            return np.exp(-2 * np.square(x - .5 + .2 * np.sin(10 * t)))

        times = np.linspace(0., 5., 11, endpoint=True)
        flist = field.fieldlist()
        for t in times:
            f = field.fdata(self.convmodel, self.curmesh,
                            [fn(self.curmesh.centers(), t)])
            f.set_time(t)
            flist.append(f)
        fig, ax = plt.subplots(1, 1)
        flist.xtcontourf('q')
        return fig
Beispiel #21
0
 def test_muscl_limiters(self, limiter):
     curmesh = self.mesh50
     endtime = 5
     cfl = .8
     # extrapol1(), extrapol2()=extrapolk(1), centered=extrapolk(-1), extrapol3=extrapolk(1./3.)
     xnum = muscl(limiter)
     finit = field.fdata(self.mymodel, curmesh,
                         [self.init_sinperk(curmesh, k=4)])
     rhs = modeldisc.fvm(self.mymodel, curmesh, xnum)
     solver = rk3ssp(curmesh, rhs)
     fsol = solver.solve(finit, cfl, [endtime])
     assert not fsol[-1].isnan()
     avg, var = fsol[-1].stats('q')
     #varref = { }
     assert avg == pytest.approx(0., abs=1.e-12)
Beispiel #22
0
 def test_interpol_t(self):
     endtime = 1. / self.curmesh.ncell
     cfl = 5.  # unstable but no risk with 1 it
     maxit = 1
     stop_directive = {'maxit': maxit}
     finit = field.fdata(self.convmodel, self.curmesh,
                         [self.init_sinperk(self.curmesh, k=4)])
     rhs = modeldisc.fvm(self.convmodel, self.curmesh, self.xsch)
     solver = tnum.explicit(self.curmesh, rhs)
     fsol2 = solver.solve(finit, cfl, [2 * endtime], stop=stop_directive)
     fsol1 = solver.solve(finit, cfl, [endtime], stop=stop_directive)
     assert not fsol2[-1].isnan()
     assert 2 * fsol1[-1].time == pytest.approx(fsol2[-1].time, abs=1.e-12)
     fi = finit.interpol_t(fsol2[-1], endtime)
     diff = fi.diff(fsol1[-1])
     for d in diff.data:
         assert np.average(np.abs(d)) == pytest.approx(0., abs=1.e-6)
Beispiel #23
0
 def test_extend_scalararray(self):
     flist = field.fieldlist()
     f1 = field.fdata(self.convmodel, self.curmesh, [1.])
     flist.append(f1)
     f2 = f1.copy()
     f2.set_time(10.)
     flist.append(f2)
     newlist = field.fieldlist()
     f3 = f2.copy()
     newlist.append(f3)
     f3.set_time(20.)
     newlist.append(f2)
     flist.extend(newlist)
     f2.reset(t=100., it=5)
     assert len(flist) == 4  # f1, f2, f3, f2
     assert flist.time_array() == [0., 100., 20., 100.]
     assert flist.it_array() == [-1, 5, -1, 5]
Beispiel #24
0
    def propagator(self, z):
        """computes scalar complex propagator of one time step

        Args:
          z:

        Returns:

        """
        # save actual modeldisc
        saved_model = self.modeldisc
        self.modeldisc = fakedisc(z)
        # make virtual field
        f = field.fdata(fakemodel(), fakemesh(), [0 * z + 1.0])
        self.step(f, dtloc=1.0) # one step with normalized time step
        # get back actual modeldisc
        self.modeldisc = saved_model
        return f.data[0]
Beispiel #25
0
 def test_interpolation_regression(self):
     endtime = 5
     cfl = .5
     finit = field.fdata(self.convmodel, self.curmesh,
                         [self.init_sinperk(self.curmesh, k=4)])
     rhs = modeldisc.fvm(self.convmodel, self.curmesh, self.xsch)
     solver = tnum.rk4(self.curmesh, rhs)
     nsol = 5
     tsave = np.linspace(0, endtime, nsol, endpoint=True)
     fsol = solver.solve(finit, cfl, tsave)
     fleg = solver.solve_legacy(finit, cfl, tsave)
     assert len(fsol) == nsol
     assert len(fleg) == nsol
     for fs, fl in zip(fsol, fleg):
         assert not fs.isnan()
         diff = fs.diff(fl)
         assert diff.time == pytest.approx(0., abs=1.e-12)
         for d in diff.data:
             assert np.average(np.abs(d)) == pytest.approx(0., abs=1.e-6)
Beispiel #26
0
 def test_frequency(self, montype):
     endtime = 5.
     cfl = .5
     finit = field.fdata(self.convmodel, self.mesh50,
                         [self.init_sinperk(self.mesh50, k=4)])
     rhs = modeldisc.fvm(self.convmodel, self.mesh50, self.xsch)
     maxit = 500
     stop_directive = {'maxit': maxit}
     solver = tnum.rk4(self.mesh50, rhs)
     mondict = {}
     for f in 1, 2, 10, 50, 100:
         monitors = {montype: {'frequency': f}}
         fsol = solver.solve(finit,
                             cfl, [endtime],
                             stop=stop_directive,
                             monitors=monitors)
         mondict[f] = monitors[montype]['output']
         assert not fsol[-1].isnan()
         assert mondict[f]._it[-1] == maxit
         assert (len(mondict[f]._it) - 1) * f == maxit
Beispiel #27
0
 def test_restart(self):
     tottime = 10.
     breaktime = 5.
     cfl = .5
     finit = field.fdata(self.convmodel, self.curmesh,
                         [self.init_sinperk(self.curmesh, k=4)])
     rhs = modeldisc.fvm(self.convmodel, self.curmesh, self.xsch)
     solver = tnum.rk4(self.curmesh, rhs)
     nsol = 10 + 1  # every second
     tsave = np.linspace(0, tottime, nsol, endpoint=True)
     #
     stop_directive = {'tottime': breaktime}
     fsol0 = solver.solve(finit, cfl, tsave, stop=stop_directive)
     assert len(fsol0) == 6  # end before expected by tsave
     assert not fsol0[-1].isnan()
     assert fsol0[-1].time == breaktime
     #
     fsol = solver.restart(fsol0[-1], cfl, tsave)
     assert len(fsol) == 6  # only last snapshots ; time 5. is saved again
     assert not fsol[-1].isnan()
     assert fsol[-1].time == tottime
Beispiel #28
0
 def fdata_fromprim(self, data):
     f = field.fdata(self.model, self.mesh, data)
     return field.fdata(self.model, self.mesh, self.model.prim2cons(f.data))
Beispiel #29
0
 def fdata(self, mesh, t=None):
     qcons = self.model.prim2cons([q.rho, q.u, q.p])
     return field.fdata(self.model, mesh, qcons)
Beispiel #30
0
 def fdata(self, mesh):
     """
     """
     qcons = self.consdata()
     return field.fdata(self.model, mesh, qcons)