I wanted to define a measure on a subdomain by imitating this:

https://jsdokken.com/dolfinx-tutorial/chapter3/robin_neumann_dirichlet.html

For example

boundaries = [(1, lambda x: np.isclose(x[0], 0) or np.isclose(x[1], 0))]

Then plug in to locate_entities function.

It tells me

The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Of course, in this case, I can use two segments to represent it. In my case, I want a more complicated boolean expression to express the boundary and mark it, mixing and, or, not…

What should I do in this case?

Hi,

Have you tried using `np.logical_or`

instead of `or`

?

As stated by @adeebkor you can use either np.logical_or or the np.bitwise or numpy.bitwise_or — NumPy v1.26 Manual which in shorthand can be written as

```
boundaries = [(1, lambda x: np.isclose(x[0], 0) | np.isclose(x[1], 0))]
```

Thank you very much for helping me out of this stupid problem.

Before I also tried the operators “|” as well as “&”. It seems they do the same thing. However, there was an error. I also figured out. Because the condition I wrote was like

`lambda x: x[0] + 1 >= r | x[1]-1 <= 2 * x[0]`

This was apparently wrong as well, because python computes | and & first than ==, <= or >=

This is purely a python grammar issue. I am also a bit new to python

If you use brackets

`lambda x: (x[0] + 1 >= r) | (x[1]-1 <= 2 * x[0])`

this should also work.