Пример #1
0
def example():
    mesh = MeshLine()
    mesh.refine(2)
    print(mesh.boundary_nodes())
    print(mesh.interior_nodes())
    # u = np.array([1, 5, 3, 2, 4]) # 在网格节点上的函数值,有顺序
    # mesh.plot(u)
    # plt.show()
    mapping = mesh.mapping() # 对一维没什么内容,重点看二维,三维

    tri = MeshTri(initmesh="reftri")
    tri.refine(1)
    tri.draw()
    mapping = tri.mapping() # CONTINUE

    pass
Пример #2
0
def TriP2Test():
    """Test triangular h-refinement.
    Also test facet assembly."""
    def U(x):
        return 1+x[0]-x[0]**2*x[1]**2

    def dUdx(x):
        return 1-2*x[0]*x[1]**2

    def dUdy(x):
        return -2*x[0]**2*x[1]

    def dudv(du,dv):
        return du[0]*dv[0]+du[1]*dv[1]

    def uv(u,v):
        return u*v

    def F(x,y):
        return 2*x**2+2*y**2

    def fv(v,x):
        return F(x[0],x[1])*v

    def G(x,y):
        return (x==1)*(3-3*y**2)+\
                (x==0)*(0)+\
                (y==1)*(1+x-3*x**2)+\
                (y==0)*(1+x)

    def gv(v,x):
        return G(x[0],x[1])*v

    dexact={}
    dexact[0]=dUdx
    dexact[1]=dUdy

    mesh=MeshTri()
    mesh.draw()
    mesh.refine(1)
    mesh.draw()
    hs=np.array([])
    H1errs=np.array([])
    L2errs=np.array([])

    for itr in range(2):
        mesh.refine()

        a=AssemblerElement(mesh,ElementTriP2())

        A=a.iasm(dudv)
        f=a.iasm(fv)

        B=a.fasm(uv)
        g=a.fasm(gv)

        u=np.zeros(a.dofnum_u.N)
        u=spsolve(A+B,f+g)

        hs=np.append(hs,mesh.param())
        L2errs=np.append(L2errs,a.L2error(u,U))
        H1errs=np.append(H1errs,a.H1error(u,dexact))

    # https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.polyfit.html
    pfit=np.polyfit(np.log10(hs),np.log10(H1errs),1)

    assert (pfit[0] >= 0.95*2)