# Getting exact function values at guass points (query points)

**URL:** <https://fenicsproject.discourse.group/t/getting-exact-function-values-at-guass-points-query-points/18249>\
**Category:** dolfinx\
**Tags:** io\
**Created:** [October 3, 2025, 7:54pm UTC](https://fenicsproject.discourse.group/t/getting-exact-function-values-at-guass-points-query-points/18249 "2025-10-03T19:54:16Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![bagla0](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/bagla0/32/4677_2.png) [@bagla0](https://fenicsproject.discourse.group/u/bagla0)\
**Post date:** [October 3, 2025, 7:54pm UTC](https://fenicsproject.discourse.group/t/getting-exact-function-values-at-guass-points-query-points/18249/1 "2025-10-03T19:54:16Z")

</div>

Dear FEniCSx community,

I have solutions over Lagrange functionspace (nodal dofs). However, I want to query the solutions at guass points.

Using boxbeam tree- gives a constant value for all points lying in an element. (one value per element).

Can you suggest functionspace which uses guass points as dofs (like how lagrange uses nodes) or way to obtain interpolated value at query point (guass point for my case)?

```auto

```

```auto
bb_tree = dolfinx.geometry.bb_tree(mesh, mesh.topology.dim)

points = np.array(points, dtype=mesh.geometry.x.dtype)
potential_colliding_cells = dolfinx.geometry.compute_collisions_points(
    bb_tree, points
)
colliding_cells = dolfinx.geometry.compute_colliding_cells(
    mesh, potential_colliding_cells, points
)
points_on_proc = []
cells = []
for i, point in enumerate(points):
    if len(colliding_cells.links(i)) > 0:
        points_on_proc.append(point)
        cells.append(colliding_cells.links(i)[0])
points_on_proc = np.array(points_on_proc, dtype=np.float64).reshape(-1, 3)
cells = np.array(cells, dtype=np.int32)

```

I remember in legacy dolfin, we can directly give query to solved ufl-function with any coordinate point- to obtain function value.

```auto

u=Function(V) # solved ufl function
u.vector(2,3,0.5) # extracting function value at (x,y,z) coordinate--> (2,3,0.5).

```

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [October 3, 2025, 8:53pm UTC](https://fenicsproject.discourse.group/t/getting-exact-function-values-at-guass-points-query-points/18249/2 "2025-10-03T20:53:06Z")

</div>

> [@bagla0](#):
>
> Using boxbeam tree- gives a constant value for all points lying in an element. (one value per element).

This is surely not right. However, as you haven’t provided a reproducible example, it is not really easy to give you guidance.

> [@bagla0](#):
>
> Can you suggest functionspace which uses guass points as dofs (like how lagrange uses nodes) or way to obtain interpolated value at query point (guass point for my case)?

You can use a “quadrature space” for this, as illustrated below:

```python
from mpi4py import MPI
import dolfinx
import basix.ufl

mesh = dolfinx.mesh.create_unit_square(MPI.COMM_WORLD, 2, 2)
V = dolfinx.fem.functionspace(mesh, ("Lagrange", 2))
u = dolfinx.fem.Function(V)
u.interpolate(lambda x: x[0] * x[1])

q_el = basix.ufl.quadrature_element(mesh.basix_cell(), degree=2, scheme="default")
Q = dolfinx.fem.functionspace(mesh, q_el)

q = dolfinx.fem.Function(Q)
u_expr = dolfinx.fem.Expression(u, Q.element.interpolation_points)
q.interpolate(u_expr)

q_coords = Q.tabulate_dof_coordinates()
for coord, val in zip(q_coords, q.x.array):
    print(f"q({coord}) = {val}")

```
