Hello,
I tried to select nodes for dirichlet condition as y=x and on_boundary
with the following code:
from fenics import *
mesh = UnitSquareMesh(2,2)
V = FunctionSpace(mesh , 'P', 1)
def f(x, on_boundary):
return near(x[1], x[0]) and on_boundary
dir = DirichletBC(V, 0, f)
print(dir.get_boundary_values())
# Output: {}
But I was not able to mark the nodes even if the method in DirichletBC
is change to "pointwise"
.
I would have expect that the top-right and low-left nodes are returned.
Anyone know what is happening ?
Thanks.
When choosing ‘pointwise’, on_boundary is always False, i.e. your function f always returns False. To mark all dofs with x = y you can try
def f(x):
return near(x[1], x[0])
bc = DirichletBC(V, Constant(0.0), f, method='pointwise')
Ok thank you !
But i don’t want the node at the center of the square (0.5, 0.5) to be constrain.
Is it possible ? Using near(x[1], x[0])
?
def f(x):
return near(x[1], x[0]) and (near(x[0],0) or near(x[0],1))
I don’t really understand why such condition with the near(x[1], x[0]) and on_boundary
is not working.
Thank you for your reply !