Пример #1
0
    def test_SurfaceParabolicFEMModel_time(self, maxit=2):
        from fealpy.pde.surface_parabolic_model_3d import SinSinSinExpDataSphere
        pde = SinSinSinExpDataSphere()
        mesh = pde.init_mesh(n=5)
        timeline = pde.time_mesh(0, 1, 2)
        errorType = ['$||u-u_h||_0$']
        error = np.zeros((len(errorType), maxit), dtype=mesh.ftype)
        Ndof = np.zeros(maxit, dtype=mesh.itype)
        for i in range(maxit):
            print(i)
            dmodel = SurfaceParabolicFEMModel(pde, mesh)
            Ndof[i] = dmodel.space.number_of_global_dofs()
            uh = dmodel.init_solution(timeline)

            timeline.time_integration(uh, dmodel, self.solver.divide)

            u = lambda x:dmodel.pde.solution(x, 1.0)
            uh = dmodel.space.function(array=uh[:, -1])
            error[0, i] = dmodel.space.integralalg.L2_error(u, uh)

#            timeline.uniform_refine()
            mesh.uniform_refine(surface=pde.surface)
        show_error_table(Ndof, errorType, error)
        showmultirate(plt, 0, Ndof, error, errorType)
        plt.show() 
Пример #2
0
    def test_SurfaceParabolicFEMModel_sdc_time(self, maxit=4):
        from fealpy.pde.surface_parabolic_model_3d import SinSinSinExpDataSphere
        pde = SinSinSinExpDataSphere()
        mesh = pde.init_mesh(n=5)
        timeline = pde.time_mesh(0, 1, 2, timeline='chebyshev')
        
        errorType = ['$|| u - u_h ||_\infty$', '$||u-u_h||_0$']
        errorMatrix = np.zeros((len(errorType), maxit), dtype=mesh.ftype)
        Ndof = np.zeros(maxit, dtype=mesh.itype)
        for i in range(maxit):
            print(i)
            dmodel = SurfaceParabolicFEMModel(pde, mesh, p=1)
            Ndof[i] = dmodel.space.number_of_global_dofs()

            uh = dmodel.init_solution(timeline)
            timeline.time_integration(uh, dmodel, self.solver.divide, nupdate=1)
            uI = dmodel.interpolation(pde.solution, timeline)
            errorMatrix[0, i] = np.max(np.abs(uI - uh))

            u = lambda x:dmodel.pde.solution(x, 1.0)
            uh = dmodel.space.function(array=uh[:, -1])
            errorMatrix[1, i] = dmodel.space.integralalg.L2_error(u, uh)
            print(errorMatrix)

            timeline.uniform_refine()
            mesh.uniform_refine(surface=pde.surface)
        show_error_table(Ndof, errorType, errorMatrix)
        showmultirate(plt, 0, Ndof, errorMatrix, errorType)
        plt.show()
Пример #3
0
    def test_polation_interoperator(self):
        pde = CosCosData()
        maxit = 4
        errorType = ['$|u_I - u_h|_{max}$']
        Maxerror = np.zeros((len(errorType), maxit), dtype=np.float)
        NE = np.zeros(maxit, )

        for i in range(maxit):
            start3 = time.time()
            mesh = self.mesh
            isBDEdge = mesh.ds.boundary_edge_flag()
            NE[i] = mesh.number_of_edges()
            h = mesh.hx
            bc = mesh.entity_barycenter('cell')
            ec = mesh.entity_barycenter('edge')

            uI = mesh.polation_interoperator(pde.solution(bc))
            uh = pde.solution(ec)
            Maxerror[0, i] = np.sqrt(np.sum(h**2 * (uh - uI)**2))
            #            Maxerror[0, i] = max(abs(uh - uI))
            end3 = time.time()
            print('time of %d iteration' % i, end3 - start3)

            if i < maxit - 1:
                mesh.uniform_refine()

        showmultirate(plt, 0, NE, Maxerror, errorType)
        print('Maxerror', Maxerror)
        plt.show()
Пример #4
0
    def test_ParabolicFEMModel_time(self, maxit=4):
        pde = CosCosExpData(0.1)
        mesh = pde.init_mesh(n=0)
        timeline = UniformTimeLine(0, 1, 2)

        errorType = ['$|| u - u_h ||_\infty$', '$||u-u_h||_0$']
        errorMatrix = np.zeros((len(errorType), maxit), dtype=mesh.ftype)
        Ndof = np.zeros(maxit, dtype=mesh.itype)
        for i in range(maxit):
            print(i)
            model = ParabolicFEMModel(pde, mesh, p=1)
            Ndof[i] = model.space.number_of_global_dofs()

            uh = model.init_solution(timeline)

            timeline.time_integration(uh, model, spsolve)
            uI = model.interpolation(pde.solution, timeline)
            errorMatrix[0, i] = np.max(np.abs(uI - uh))

            u = lambda x: model.pde.solution(x, 1.0)
            uh = model.space.function(array=uh[:, -1])
            errorMatrix[1, i] = model.space.integralalg.L2_error(u, uh)
            print(errorMatrix)

            timeline.uniform_refine()
            mesh.uniform_refine(surface=pde.surface)

        show_error_table(Ndof, errorType, errorMatrix)
        showmultirate(plt, 0, Ndof, errorMatrix, errorType)
        plt.show()
    NDof[i] = space.number_of_global_dofs()
    bc = DirichletBC(space, pde.dirichlet)

    uh = space.function()
    A, F = bc.apply(A, F, uh)
    uh[:] = spsolve(A, F)

    errorMatrix[0, i] = space.integralalg.error(pde.solution,
                                                uh.value,
                                                power=2)
    errorMatrix[1, i] = space.integralalg.error(pde.gradient,
                                                uh.grad_value,
                                                power=2)
    errorMatrix[2, i] = space.integralalg.error(pde.gradient,
                                                rguh.value,
                                                power=2)
    eta = space.recovery_estimate(uh)
    errorMatrix[3, i] = np.sqrt(np.sum(eta**2))

    if i < maxit - 1:
        isMarkedCell = mark(eta, theta=theta)
        mesh.bisect(isMarkedCell)
        mesh.add_plot(plt)
        plt.savefig('./test-' + str(i + 1) + '.png')
        plt.close()

mesh.add_plot(plt)
showmultirate(plt, maxit - 5, NDof, errorMatrix, errorType)
plt.show()
Пример #6
0
    Dp1eL2 = fdm.get_Dp1L2_error()

    error[0, i] = ueL2
    error[1, i] = peL2
    error[2, i] = DpeL2
    error[3, i] = Dp1eL2
    error[4, i] = normuL2
    #    showsolution(plt, mesh, pde, uh, ph)
    x = np.arange(count[i])
    fig = plt.figure()
    ax1 = fig.add_subplot(121)
    ax1.set_title('rp')
    ax1.scatter(x, r[0, :count[i]], c='r', marker='.')
    ax2 = fig.add_subplot(122)
    ax2.set_title('ru')
    ax2.scatter(x, r[1, :count[i]], c='b', marker='.')

    if i < maxit - 1:
        nx = 2 * nx
        ny = 2 * ny
    tottime = time.time() - t1
    print('Total time:', tottime)
    print('Solve time:', Stime)
print('err', err)
print('error', error)
print('iter', count)
#mesh.add_plot(plt,cellcolor='w')
#showmultirate(plt,0,Ndof,err,errorType)
showmultirate(plt, 0, Ndof, error, errorType)
plt.show()
Пример #7
0
             'rp = %e' % r[0, count[i] - 1],
             ha='center')
    plt.yscale('symlog')
    ax1.set_yticks([-0.001, 0, 0.0002, 0.0008, 0.0009])
    plt.ylim([-0.0001, 0.0009])
    ax2 = fig.add_subplot(122)
    ax2.set_title('ru')
    ax2.scatter(x, r[1, :count[i]], c='b', marker='.')

    if i < maxit - 1:
        hx = hx / 2
        hx = hx.repeat(2)
        hy = hy / 2
        hy = hy.repeat(2)
    tottime = time.time() - t1
    print('Total time:', tottime)
    print('Solve time:', Stime)
print('err', err)
print('error1', error1)
print('error2', error2)
print('iter', count)
print('Ndof', Ndof)
print('M4P4b30t9')
#mesh.add_plot(plt,cellcolor='w')
#showmultirate(plt,0,Ndof,err,errorType)
showmultirate(plt, 0, Ndof, error1, errorType1)
#plt.savefig("/home/liao/Desktop/M4P4b30t9updp.eps",dpi=None)
showmultirate(plt, 0, Ndof, error2, errorType2)
#plt.savefig("/home/liao/Desktop/M4P4b30t9ucu.eps",dpi=None)
plt.show()
Пример #8
0
    #ruh = curl_recover(uh)
    space = LagrangeFiniteElementSpace(mesh, p=1)
    rcuh = space.function(dim=1)
    rcuh[:] = spr(uh, edge_curl_value)  # curl

    ruh = space.function(dim=2)
    ruh[:, 0] = spr(uh, edge_value_0)  #
    ruh[:, 1] = spr(uh, edge_value_1)

    errorMatrix[0, i] = space.integralalg.L2_error(pde.solution, uh)
    errorMatrix[1, i] = space.integralalg.L2_error(pde.curl, uh.curl_value)
    errorMatrix[2, i] = space.integralalg.L2_error(pde.solution, ruh)
    errorMatrix[3, i] = space.integralalg.L2_error(pde.curl, rcuh)

    # 计算单元上的恢复型误差
    eta0 = space.integralalg.error(uh.curl_value, rcuh, power=2,
                                   celltype=True)  # eta_K
    eta1 = space.integralalg.error(uh.value, ruh, power=2,
                                   celltype=True)  # xi_K
    eta = np.sqrt(eta0**2 + eta1**2)  # S_K
    errorMatrix[4, i] = np.sqrt(np.sum(eta**2))  # S_h
    if i < args.maxit - 1:
        isMarkedCell = mark(eta, theta=args.theta)
        mesh.bisect(isMarkedCell)
        mesh.add_plot(plt)
        plt.savefig('./test-' + str(i + 1) + '.eps')
        plt.close()

showmultirate(plt, args.maxit - 10, NDof, errorMatrix, errorType, propsize=20)
plt.show()
Пример #9
0
    vem.solve()
    eta = vem.recover_estimate(rtype='inv_area', residual=True)
    Ndof[i] = vem.space.number_of_global_dofs()
    errorMatrix[0, i] = vem.l2_error()
    errorMatrix[1, i] = vem.uIuh_error()
    errorMatrix[2, i] = vem.L2_error()

    if m == 1:
        errorMatrix[3, i] = vem.H1_semi_error_Kellogg_1()
    else:
        errorMatrix[3, i] = vem.H1_semi_error()

    errorMatrix[4, i] = np.sqrt(np.sum(eta**2))
    if i < maxit - 1:
        isMarkedCell = quadtree.refine_marker(eta, theta, method="L2")
        quadtree.refine(isMarkedCell)
        mesh = quadtree.to_pmesh()

mesh.add_plot(plt, showaxis=True)

fig2 = plt.figure()
fig2.set_facecolor('white')
axes = fig2.gca(projection='3d')
x = mesh.node[:, 0]
y = mesh.node[:, 1]
tri = quadtree.leaf_cell(celltype='tri')
axes.plot_trisurf(x, y, tri, vem.uh[:len(x)], cmap=plt.cm.jet, lw=0.0)

showmultirate(plt, k, Ndof, errorMatrix[2:, :], errorType[2:])
plt.show()
Пример #10
0
    e = fem.recover_estimate()
    bc = mesh.barycenter()
    e = 1 / np.exp(bc[:, 2]**2)**2
    h, ch = node_sizing(mesh, e, eta=1, smooth=6)
    errorMatrix[3, i] = np.sqrt(np.sum(e**2))
    if i < maxit - 1:
        mesh.uniform_refine(1, surface)
        fem.reinit(mesh)

meshio.write_obj_mesh(mesh, 'spheretrimesh.obj')
np.savetxt('size.txt', h)

fig = plt.figure()
fig.set_facecolor('white')
axes = fig.gca(projection='3d')
x = mesh.point[:, 0]
y = mesh.point[:, 1]
z = mesh.point[:, 2]
mesh.add_plot(axes, cellcolor=ch, showcolorbar=True)
#axes.plot_trisurf(x, y, z, triangles=mesh.ds.cell, cmap=plt.cm.jet, lw=0.0)

fig = plt.figure()
fig.set_facecolor('white')
axes = fig.gca()
optionlist = [
    'k-*', 'b-o', 'r--^', 'g->', 'm-8', 'c-D', 'y-x', 'y-+', 'y-h', 'y-p'
]
showmultirate(axes, 0, Ndof, errorMatrix[:4, :], optionlist[:4], errorType[:4])
axes.legend(loc=3, prop={'size': 30})
plt.show()
Пример #11
0
Ndof = np.zeros((maxit,), dtype=np.int)
errorMatrix = np.zeros((len(errorType), maxit), dtype=np.float)


marker = AdaptiveMarker2d(model.interface, maxh=0.1, maxa=2)
alg = QuadtreeInterfaceMesh2d(quadtree, marker)
pmesh= alg.get_interface_mesh()

pmesh.add_plot(plt, cellcolor='w')
integrator = TriangleQuadrature(3)
vem = PoissonInterfaceVEMModel(model, pmesh, p=1, integrator=integrator)

for i in range(maxit):
    print('step:', i)
    vem.solve()
    Ndof[i] = vem.vemspace.number_of_global_dofs()
    errorMatrix[0, i] = vem.l2_error()
    errorMatrix[1, i] = vem.uIuh_error() 
    errorMatrix[2, i] = vem.L2_error()
    errorMatrix[3, i] = vem.H1_semi_error()
    errorMatrix[4, i] = np.sqrt(np.sum(eta**2))
    if i < maxit - 1:
        quadtree.uniform_refine()
        pmesh = alg.get_interface_mesh()
        vem.reinit(pmesh)

k,l = 0, 4
showmultirate(plt, k, Ndof, errorMatrix[:l, :], errorType[:l])
plt.show()

Пример #12
0
fig2 = plt.figure()
fig2.set_facecolor('white')
axes = fig2.gca(projection='3d')
x = mesh.point[:, 0]
y = mesh.point[:, 1]
s = axes.plot_trisurf(x,
                      y,
                      fem.uh,
                      triangles=mesh.ds.cell,
                      cmap=plt.cm.jet,
                      lw=0.0)
fig2.colorbar(s)
fig2.savefig(d + '/solution.pdf')

fig3 = plt.figure(figsize=(40, 40), facecolor='w')
axes = fig3.gca()

optionlist = [
    'k-*', 'b-o', 'r--^', 'g->', 'm-8', 'c-D', 'y-x', 'y-+', 'y-h', 'y-p'
]
showmultirate(axes, k, Ndof, errorMatrix, optionlist, errorType)

#optionlist = ['k-*', 'r-^']
#showmultirate(axes, k, Ndof, errorMatrix[4:7:2], optionlist, errorType[4:7:2])
axes.legend(loc=3, prop={'size': 60})
axes.tick_params(labelsize=60)
axes.axis('tight')
fig3.savefig(d + '/error.pdf')
plt.show()
Пример #13
0
from fealpy.pde.poisson_2d import CosCosData
from fealpy.fem.PoissonFEMModel import PoissonFEMModel
from fealpy.tools.show import showmultirate

p = int(sys.argv[1])
q = int(sys.argv[2])
n = int(sys.argv[3])

pde = CosCosData()
mesh = pde.init_mesh(n=n, meshtype='tri')
integrator = mesh.integrator(q)
maxit = 4

errorType = ['$|| u - u_h||_{0}$', '$||\\nabla u - \\nabla u_h||_{0}$']
Ndof = np.zeros((maxit,), dtype=np.int)
errorMatrix = np.zeros((len(errorType), maxit), dtype=np.float)
for i in range(maxit):
    fem = PoissonFEMModel(pde, mesh, p, integrator)
    fem.solve()
    Ndof[i] = fem.femspace.number_of_global_dofs()
    errorMatrix[0, i] = fem.get_L2_error()
    errorMatrix[1, i] = fem.get_H1_error()
    if i < maxit - 1:
        mesh.uniform_refine()

print('Ndof:', Ndof)
print('error:', errorMatrix)
showmultirate(plt, 0, Ndof, errorMatrix[:3, :],  errorType[:3])
plt.show()

        mesh = rectangledomainmesh([-2, 2, -2, 2],
                                   nx=n,
                                   ny=n,
                                   meshtype='polygon')
        vem.reinit(mesh)

data['errorMatrix'] = errorMatrix
data['Ndof'] = Ndof
fo = 'uh{}.mat'.format(p)
sio.matlab.savemat(fo.format(i + 1), data)

mesh.add_plot(plt, cellcolor='w')
show_error_table(Ndof, errorType, errorMatrix)
#fig2 = plt.figure()
#fig2.set_facecolor('white')
#axes = fig2.gca(projection='3d')
#x = mesh.point[:, 0]
#y = mesh.point[:, 1]
#tri = quadtree.leaf_cell(celltype='tri')
#s = axes.plot_trisurf(x, y, tri, vem.uh[:len(x)], cmap=plt.cm.jet, lw=0.0)
#fig2.colorbar(s)
#
#fig3 = plt.figure()
#fig3.set_facecolor('white')
#axes = fig3.gca(projection='3d')
#s = axes.plot_trisurf(x, y, tri, vem.uI-vem.gI, cmap=plt.cm.jet, lw=0.0)
#fig3.colorbar(s)

showmultirate(plt, 0, Ndof, errorMatrix, errorType)
plt.show()
Пример #15
0
]
errorMatrix = np.zeros((2, maxit), dtype=np.float)
NDof = np.zeros(maxit, dtype=np.float)

for i in range(maxit):
    mesh = mf.boxmesh2d(box, nx=n, ny=n, meshtype='poly')
    space = ConformingVirtualElementSpace2d(mesh, p=p)
    NDof[i] = space.number_of_global_dofs()
    uh = space.function()
    bc = DirichletBC(space, pde.dirichlet)
    A = space.stiff_matrix()
    F = space.source_vector(pde.source)

    A, F = bc.apply(A, F, uh)

    uh[:] = spsolve(A, F)

    sh = space.project_to_smspace(uh)

    errorMatrix[0, i] = space.integralalg.error(pde.solution, sh.value)
    errorMatrix[1, i] = space.integralalg.error(pde.gradient, sh.grad_value)

    uI = space.interpolation(pde.solution)

    n *= 2

mesh.add_plot(plt)
uh.add_plot(plt, cmap='rainbow')
showmultirate(plt, 0, NDof, errorMatrix, errorType, propsize=20, lw=2, ms=4)
plt.show()
Пример #16
0
    uh = space.function()
    A = space.stiff_matrix()
    F = space.source_vector(pde.source)

    bc = NeumannBC(space, pde.neumann)
    A, F = bc.apply(
        F, A=A)  # Here is the case for pure Neumann bc, we also need modify A
    # bc.apply(F) # Not pure Neumann bc case
    uh[:] = spsolve(A, F)[:-1]  # we add a addtional dof

    # Here can not work
    #ml = pyamg.ruge_stuben_solver(A)
    #x = ml.solve(F, tol=1e-12, accel='cg').reshape(-1)
    #uh[:] = x[-1]

    errorMatrix[0, i] = space.integralalg.L2_error(pde.solution, uh)
    errorMatrix[1, i] = space.integralalg.L2_error(pde.gradient, uh.grad_value)

    if i < maxit - 1:
        mesh.uniform_refine()

if d == 2:
    fig = plt.figure()
    axes = fig.gca(projection='3d')
    uh.add_plot(axes, cmap='rainbow')
elif d == 3:
    print('The 3d function plot is not been implemented!')
showmultirate(plt, 0, NDof, errorMatrix, errorType, propsize=20)

plt.show()
Пример #17
0
    markedCell = mark(eta1, theta)
    if i < maxit - 1:
        mesh.bisect(markedCell)

fig2 = plt.figure()
fig2.set_facecolor('white')
axes = fig2.gca(projection='3d')
node = mesh.entity('node')
x = mesh.node[:, 0]
y = mesh.node[:, 1]
s = axes.plot_trisurf(x,
                      y,
                      fem.uh,
                      triangles=mesh.ds.cell,
                      cmap=plt.cm.jet,
                      lw=0.0)
fig2.colorbar(s)
fig2.savefig(d + '/solution.pdf')

fig3 = plt.figure(figsize=(40, 40), facecolor='w')
axes = fig3.gca()
axes = showmultirate(axes, k, Ndof, errorMatrix[4:7:2, :], errorType[4:7:2])

#optionlist = ['k-*', 'r-^']
#showmultirate(axes, k, Ndof, errorMatrix[4:7:2], optionlist, errorType[4:7:2])
axes.legend(loc=3, prop={'size': 60})
axes.tick_params(labelsize=60)
axes.axis('tight')
fig3.savefig(d + '/error.pdf')
plt.show()