Applying boundary conditions at corner of 2D plate

Hi, i want to do a small patch test and apply multiple boundary conditions to my 2D rectangular plate.
On the left side of the plate I want to fix only the X-dofs for all points except the lower most corner point (0,0) for which I want to fix both dofs. I cannot however fix the corners

The MWE looks like this :

from dolfin import *

myMesh= RectangleMesh(Point(0,0), Point(2,1), 24, 12)
### define regions for bc applications ###

class LeftEdge(SubDomain):
    def inside(self, x, on_boundary):
        return (on_boundary and abs(x[0]-0.) < DOLFIN_EPS*1e3)

class RightEdge(SubDomain):
    def inside(self, x, on_boundary):
        tol = 1e-6
        return on_boundary and abs(x[0] - 2.0) < DOLFIN_EPS*1e3

class CornerPoint(SubDomain):
    def inside(self, x, on_boundary):
        return near(x[0], 0., DOLFIN_EPS*1e3) and near(x[1], 0., DOLFIN_EPS*1e3)  ## is this correct ?

left_edge   = LeftEdge()
right_edge  = RightEdge()
corner_point = CornerPoint()
right_edge.mark(sub_domains, 5)
corner_point.mark(sub_domains, 6)

ds = Measure("ds")(subdomain_data=sub_domains)

# Material Constants
E=1.0; nu=1.0; rho=1.0; 
mu=1.0; bulk=1.0; gamma=1.0;

## Variational Formulation 
V = VectorFunctionSpace(mesh, 'Lagrange', degree=1)
u = TrialFunction(V)
d = u.geometric_dimension()
v = TestFunction(V)
a = inner(sigma(u), eps(v))*dx
 

#Neumann Boundary condition for traction force
force = 1000
g = inner(Constant((force,0)),v) #
l = g*ds(5)
    
#Applying bc and solving
bc1 = DirichletBC(V.sub(0), Constant(0.), left_edge) #fixing only X-dofs on left edge 
bc2 = DirichletBC(V, Constant(0.0, 0.0), corner_point, method='pointwise') #doesn't work 
bcs = [bc1, bc2]
A = assemble(a)
b = assemble(l)
for bc in bcs: bc.apply(A,b)

u_fe = Function(V, name="Displacement")
#solve(a == l, u_fe, bc)
solve(A, u_fe.vector(), b)

I get an error saying

UFLException: Invalid cell 0.0.’

when I try to apply bc2

Can anyone suggest how can i achieve this in Fenics ?

The “invalid cell” error is coming from the definition of the vector Constant passed as an argument to the constructor for bc2. You can reproduce it simply with

from dolfin import *
c = Constant(0.0,0.0)

The correct way to define a vector-valued Constant is by passing a tuple to the constructor (i.e., adding one more layer of parentheses):

from dolfin import *
c = Constant((0.0,0.0))