I am trying to use method=pointwise in dirichletBC. However, after definition of facets, it is showing error: A SubDomain is required for pointwise search. Below is the MWC
from dolfin import *
mesh = BoxMesh(Point(-5,-10,0),Point(5,0,1),50,50,5)
class Corner(SubDomain):
def inside(self, x, on_boundary):
return x[0] ==-5.0 and x[1]==-10.0
class Bottom(SubDomain):
def inside(self, x, on_boundary):
return near(x[1], -10.0) and on_boundary
E = Constant(210e3)
nu = Constant(0.3)
mu = E/2/(1+nu)
lmbda = E*nu/(1+nu)/(1-2*nu)
def eps(v):
return sym(grad(v))
def sigma(v):
return 2.0*mu*eps(v) + lmbda*tr(eps(v))*Identity(3)
FS_disp = VectorFunctionSpace(mesh, "CG", 1)
facets = MeshFunction("size_t", mesh, mesh.topology().dim()-1)
facets.set_all(0)
Corner().mark(facets, 1)
Bottom().mark(facets,2)
bc_u = [DirichletBC(FS_disp.sub(1), Constant(0.0), facets,2),
DirichletBC(FS_disp.sub(1), Constant(0.0), facets,1, method = 'pointwise') ]
DispTrial, DispTest = TrialFunction(FS_disp), TestFunction(FS_disp)
disp = Function(FS_disp, name = "displacement")
E_disp = inner(grad(DispTest),sigma(DispTrial))*dx
problem_disp = LinearVariationalProblem(lhs(E_disp), rhs(E_disp), disp, bc_u)
solver_disp = LinearVariationalSolver(problem_disp)
solver_disp.solve()
File("Disp.pvd") << disp`