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)
示例#2
0
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)
示例#3
0
    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)