# Dirichlet boundary condition does not work for "pointwise"

Asked by Murtazo Nazarov on 2009-12-01

The Dirichlet boundary condition does not work if I chose the "pointwise" setting:

In Stokes demo I define my subdomain as:

class Corner : public SubDomain
{
public:
bool inside(const double* x, bool on_boundary) const
{
return on_boundary &&
(std::abs(x[0] - 1.0) < 0.1 + DOLFIN_EPS ) &&
(std::abs(x[1] - 1.0) < 0.1 + DOLFIN_EPS);
}
};

Then I apply for zero BC for pressure in this subdomain:
Corner cr;
Constant zero(2, 0.0);
DirichletBC bc(W1, zero, cr, "pointwise");
// DirichletBC bc(W1, zero, cr, "geometric");

However "geometric" and "topological" options it works.

/murtazo

## Question information

Language:
English Edit question
Status:
For:
DOLFIN Edit question
Assignee:
No assignee Edit question
Last query:
2009-12-02
2009-12-02

This question was originally filed as bug #490987.

 Andy R Terrel (andy-terrel) said on 2009-12-02: #1

I believe this comes from the fact that the pointwise call always sets on_boundary to be false:

Also this method for a pinpoint will constrain more of the pressure than you want, for better results do:

class Corner : public SubDomain
{
public:
bool inside(const double* x, bool on_boundary) const
{
return (std::abs(x[0] - 1.0) < DOLFIN_EPS ) &&
(std::abs(x[1] - 1.0) < DOLFIN_EPS);
}
};

Of course you have to apply this as pointwise because the geometric and topological searches only look at facets and this is only hitting one point.

-- Andy

 Murtazo Nazarov (murtazo) said on 2009-12-02: #2

It seems subdomain marker does not mark vertices, or?

 Murtazo Nazarov (murtazo) said on 2009-12-02: #3

Ok, if you remove on_boundary you might end up to apply BC to the interior points, which is wrong. I agree that for several points you can use "geometrical" or "topological" options, but this should work with "pointwise" as well.

 Andy R Terrel (andy-terrel) said on 2009-12-02: #4

> It seems subdomain marker does not mark vertices, or?

Subdomain markers can mark vertices, but if you use topological or geometrical they only mark facets (so object with topological dimension one less than the mesh). Thus to mark just vertices you could create a submesh then mark the system based on that, or at least you were able to in the past. But the easiest to get going it just to use a pointwise search that will mark all dof that relate.

> Ok, if you remove on_boundary you might end up to apply BC to the interior points, which is wrong. I agree that for several points you can use "geometrical" or "topological" options, but this should work with "pointwise" as well.

The problem is that there is not a separate iteration over the boundary and interior for the pointwise search. I guess that could be the bug, but you are currently able to limit yourself to the points needed with the x coords so you don't have to worry about getting the interior if you define it correctly.