from scipy.sparse import coo_matrix, csr_matrix, csc_matrix, spdiags, bmat from fealpy.pde.linear_elasticity_model import PolyModel3d as PDE from fealpy.functionspace import LagrangeFiniteElementSpace from fealpy.boundarycondition import DirichletBC from fealpy.solver.LinearElasticityRLFEMFastSolver import LinearElasticityRLFEMFastSolver as FastSovler n = int(sys.argv[1]) pde = PDE(lam=10000.0, mu=1.0) mu = pde.mu lam = pde.lam mesh = pde.init_mesh(n=n) space = LagrangeFiniteElementSpace(mesh, p=1, q=1) M, G = space.recovery_linear_elasticity_matrix(lam, mu, format=None) F = space.source_vector(pde.source, dim=3) uh = space.function(dim=3) isBdDof = space.set_dirichlet_bc(uh, pde.dirichlet) solver = FastSovler(lam, mu, M, G, isBdDof) solver.solve(uh, F, tol=1e-12) uI = space.interpolation(pde.displacement, dim=3) e = uh - uI error = np.sqrt(np.mean(e**2)) print(error)
import numpy as np from scipy.sparse.linalg import spsolve import matplotlib.pyplot as plt from fealpy.pde.linear_elasticity_model import HuangModel2d from fealpy.functionspace import LagrangeFiniteElementSpace from fealpy.boundarycondition import BoundaryCondition p = int(sys.argv[1]) n = int(sys.argv[2]) pde = HuangModel2d(lam=100000, mu=1.0) mu = pde.mu lam = pde.lam mesh = pde.init_mesh(n=n) space = LagrangeFiniteElementSpace(mesh, p=p) bc = BoundaryCondition(space, dirichlet=pde.dirichlet) uh = space.function(dim=2) #A = space.linear_elasticity_matrix(mu, lam) A = space.recovery_linear_elasticity_matrix(mu, lam) F = space.source_vector(pde.source, dim=2) A, F = bc.apply_dirichlet_bc(A, F, uh, is_dirichlet_boundary=pde.is_dirichlet_boundary) uh.T.flat[:] = spsolve(A, F) error = space.integralalg.L2_error(pde.displacement, uh) print(error)
from fealpy.pde.linear_elasticity_model import PolyModel3d as PDE pde = PDE(lam=100000, mu=1.0) mu = pde.mu lam = pde.lam mesh = pde.init_mesh(n=n) space = LagrangeFiniteElementSpace(mesh, p=1) uh = space.function(dim=d) isBdDof = space.set_dirichlet_bc(uh, pde.dirichlet) if False: P = space.stiff_matrix() M, G = space.recovery_linear_elasticity_matrix(mu, lam, format=None) F = space.source_vector(pde.source, dim=d) solver = LinearElasticityRLFEMFastSolver(mu, lam, M, G, P, isBdDof) uh = solver.solve(uh, F) else: P = space.stiff_matrix() M, G = space.recovery_linear_elasticity_matrix(mu, lam, format=None) A = space.recovery_linear_elasticity_matrix(mu, lam, format='csr') F = space.source_vector(pde.source, dim=d) solver = LinearElasticityRLFEMFastSolver(mu, lam, M, G, P, isBdDof) bc = DirichletBC(space, pde.dirichlet) A, F = bc.apply(A, F, uh) uh = solver.cg(A, F, uh)