Ejemplo n.º 1
0
 def diff_index_test(self, p=3):
     mfactory = MeshFactory()
     mesh = mfactory.one_tetrahedron_mesh()
     space = ScaledMonomialSpace3d(mesh, p=p)
     index = space.diff_index_1()
     print(index)
     index = space.diff_index_2()
     print(index)
Ejemplo n.º 2
0
 def show_frame_test(self):
     fig = plt.figure()
     axes = fig.gca(projection='3d')
     mfactory = MeshFactory()
     mesh = mfactory.one_tetrahedron_mesh()
     space = ScaledMonomialSpace3d(mesh, p=1)
     space.show_frame(axes)
     plt.show()
Ejemplo n.º 3
0
class HalfEdgeMesh3dTest:

    def __init__(self):
        self.meshfactory = MeshFactory()

    def one_tetrahedron_mesh_test(self):
        tmesh = self.meshfactory.one_tetrahedron_mesh(ttype='equ')
        mesh = HalfEdgeMesh3d.from_mesh(tmesh)
        mesh.print()
Ejemplo n.º 4
0
 def one_tet_mesh_test(self, p, plot=True):
     mfactory = MeshFactory()
     mesh = mfactory.one_tetrahedron_mesh()
     space = ScaledMonomialSpace3d(mesh, p=p)
     if plot:
         fig = plt.figure()
         axes = fig.gca(projection='3d')
         mesh.add_plot(axes)
         axes.set_axis_off()
         plt.show()
Ejemplo n.º 5
0
class RaviartThomasFiniteElementSpace3dTest:
    def __init__(self):
        self.meshfactory = MeshFactory()

    def show_basis_test(self, p=0):
        mesh = self.meshfactory.one_tetrahedron_mesh(ttype='equ')
        space = RaviartThomasFiniteElementSpace3d(mesh, p=p, q=2)
        fig = plt.figure()
        space.show_basis(fig)
        plt.show()
Ejemplo n.º 6
0
    def cell_basis_test(self):
        mfactory = MeshFactory()
        mesh = mfactory.one_tetrahedron_mesh(ttype='iso')
        space = ScaledMonomialSpace3d(mesh, p=2)

        bc = np.array([[1, 0, 0, 0]])
        point = mesh.bc_to_point(bc, 'cell')
        print(point.shape)
        print(space.cellsize)
        phi = space.basis(point)
        print(phi)
Ejemplo n.º 7
0
    def face_basis_test(self):
        mfactory = MeshFactory()
        mesh = mfactory.one_tetrahedron_mesh(ttype='iso')
        space = ScaledMonomialSpace3d(mesh, p=1)

        face = mesh.entity('face')
        print(face)
        print('frame:', space.faceframe)
        bc = np.array([[1 / 3, 1 / 3, 1 / 3]])
        bc = np.array([[1, 0, 0]])
        point = mesh.bc_to_point(bc, 'face')
        print(point.shape)
        phi = space.face_basis(point)
        print(phi)
Ejemplo n.º 8
0
class RaviartThomasFiniteElementSpace3dTest:
    def __init__(self):
        self.meshfactory = MeshFactory()

    def show_basis(self, p=0):
        mesh = self.meshfactory.one_tetrahedron_mesh(ttype='equ')
        space = RaviartThomasFiniteElementSpace3d(mesh, p=p, q=2)
        fig = plt.figure()
        space.show_basis(fig)
        plt.show()

    def basis_coefficients(self, n=0, p=0):
        pde = X2Y2Z2Data()
        mesh = pde.init_mesh(n=n, meshtype='tet')
        space = RaviartThomasFiniteElementSpace3d(mesh, p=p)
        C = space.basis_coefficients()

        return C

    def solve_poisson_3d(self, n=0, p=0, plot=True):
        pde = CosCosCosData()
        mesh = pde.init_mesh(n=n, meshtype='tet')
        space = RaviartThomasFiniteElementSpace3d(mesh, p=p, q=p + 4)

        udof = space.number_of_global_dofs()
        pdof = space.smspace.number_of_global_dofs()
        gdof = udof + pdof

        uh = space.function()
        print('uh:', uh.shape)
        ph = space.smspace.function()
        print('ph:', ph.shape)
        A = space.stiff_matrix()
        B = space.div_matrix()
        F1 = space.source_vector(pde.source)
        AA = bmat([[A, -B], [-B.T, None]], format='csr')

        F0 = space.neumann_boundary_vector(pde.dirichlet)
        FF = np.r_['0', F0, F1]
        x = spsolve(AA, FF).reshape(-1)
        uh[:] = x[:udof]
        ph[:] = x[udof:]
        error0 = space.integralalg.L2_error(pde.flux, uh)

        def f(bc):
            xx = mesh.bc_to_point(bc)
            return (pde.solution(xx) - ph(xx))**2

        error1 = space.integralalg.integral(f)
        print(error0, error1)
Ejemplo n.º 9
0
 def show_face_basis_index_test(self):
     mfactory = MeshFactory()
     mesh = mfactory.one_tetrahedron_mesh()
     space = ScaledMonomialSpace3d(mesh, p=3)
     space.show_face_basis_index(p=3)
Ejemplo n.º 10
0
 def face_index_test(self, p=3):
     mfactory = MeshFactory()
     mesh = mfactory.one_tetrahedron_mesh()
     space = ScaledMonomialSpace3d(mesh, p=p)
     space.face_diff_index_1()
Ejemplo n.º 11
0
import numpy as np
from fealpy.mesh import MeshFactory
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
mf = MeshFactory()
mesh = mf.one_tetrahedron_mesh(meshtype='iso')

node = np.array([[0, 0, 0],[0, 1, 0],[1, 0, 0],[0, 0, 1]],dtype=np.float)
cell = np.array([0, 1, 2, 3],dtype=np.float)
#计算6倍四面体体积
v0 = node[1,:]-node[0,:]
v1 = node[2,:]-node[0,:]
v2 = node[3,:]-node[0,:]
nv = np.cross(v0,-v1)
V = np.dot(nv, v2)#四面体的6倍体积

Dlambda = np.zeros((4,3), dtype=np.float)
W = np.array([[-1,0,0], [0,1,0], [0,0,-1]], dtype=np.float)
node1 = np.array([[1,1,1],node[0:3,1],node[0:3,2]])
node2 = np.array([[1,1,1],node[0:3,0],node[0:3,2]])
node3 = np.array([[1,1,1],node[0:3,0],node[0:3,1]])
a1 = np.linalg.det(node1)
a2 = np.linalg.det(node2)
a3 = np.linalg.det(node3)
Dlambda[0,:] = [a1,a2,a3]@W/V
node4 = np.array([[1,1,1],node[1:4,1],node[1:4,2]])
node5 = np.array([[1,1,1],node[1:4,0],node[1:4,2]])
node6 = np.array([[1,1,1],node[1:4,0],node[1:4,1]])
a4 = np.linalg.det(node4)
a5 = np.linalg.det(node5)
a6 = np.linalg.det(node6)