def solve_poisson_robin(self, p=1, n=1, plot=True): pde = XYData() mesh = pde.init_mesh(n=n) node = mesh.node cell = mesh.entity("cell") name = 'RobinBCTest.mat' space = LagrangeFiniteElementSpace(mesh, p=p) A = space.stiff_matrix() F = space.source_vector(pde.source) # print(A.toarray()) # A, F = space.set_robin_bc(A, F, pde.robin) uh = space.function() #bc = BoundaryCondition(space, robin=pde.robin) A, b = space.set_robin_bc(A, F, pde.robin) uh[:] = spsolve(A, b).reshape(-1) error = space.integralalg.L2_error(pde.solution, uh) print(error) # print('A:', A.toarray()) # print('F:', F) if plot: fig = plt.figure() axes = fig.gca() mesh.add_plot(axes) mesh.find_node(axes, showindex=True) mesh.find_cell(axes, showindex=True) plt.show()
def solve_poisson_robin(self, p=1, n=1, plot=True): pde = XYData() mesh = pde.init_mesh(n=1) space = LagrangeFiniteElementSpace(mesh, p=p) A = space.stiff_matrix() F = space.source_vector(pde.source) space.set_robin_bc(A, F, pde.robin) print('A:', A.toarray()) print('F:', F) if plot: fig = plt.figure() axes = fig.gca() mesh.add_plot(axes) mesh.find_node(axes, showindex=True) mesh.find_cell(axes, showindex=True) plt.show()
def solve_poisson_robin(self, p=1, n=1, plot=True): pde = CosCosCosData() mesh = pde.init_mesh(n=n) space = LagrangeFiniteElementSpace(mesh, p=p) A = space.stiff_matrix() F = space.source_vector(pde.source) uh = space.function() bc = BoundaryCondition(space, robin=pde.robin) A, b = space.set_robin_bc(A, F, pde.robin) uh[:] = spsolve(A, b).reshape(-1) error = space.integralalg.L2_error(pde.solution, uh) print(error)