# Null space explanation

**URL:** <https://fenicsproject.discourse.group/t/null-space-explanation/11831>\
**Category:** variational formulation\
**Created:** [July 26, 2023, 12:13pm UTC](https://fenicsproject.discourse.group/t/null-space-explanation/11831 "2023-07-26T12:13:00Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![michele\_barucca](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/michele_barucca/32/5350_2.png) [@michele\_barucca](https://fenicsproject.discourse.group/u/michele_barucca)\
**Post date:** [July 26, 2023, 12:13pm UTC](https://fenicsproject.discourse.group/t/null-space-explanation/11831/1 "2023-07-26T12:13:00Z")

</div>

Hello everyone, I am quite new to finite elements and I cannot really catch the idea behind null spaces (for example to solve the Poisson problem with Neumann boundary conditions). Can someone explain me how they work or give me a reference?

Thanks in advance.

---

<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:** [July 26, 2023, 12:16pm UTC](https://fenicsproject.discourse.group/t/null-space-explanation/11831/2 "2023-07-26T12:16:09Z")

</div>

See for instance [KSP: Linear System Solvers — PETSc 3.19.3 documentation](https://petsc.org/release/manual/ksp/#solving-singular-systems)

---

<div class="post-metadata">

**Author:** ![michele\_barucca](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/michele_barucca/32/5350_2.png) [@michele\_barucca](https://fenicsproject.discourse.group/u/michele_barucca)\
**Post date:** [July 26, 2023, 12:51pm UTC](https://fenicsproject.discourse.group/t/null-space-explanation/11831/3 "2023-07-26T12:51:14Z")

</div>

Thanks for the fast reply. Then I don’t get how it is used internally to deal with the singularity of the matrix. Can you give me some hints?

---

<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:** [July 26, 2023, 1:48pm UTC](https://fenicsproject.discourse.group/t/null-space-explanation/11831/4 "2023-07-26T13:48:59Z")

</div>

DOLFIN uses petsc under the hood, which needs the nullspace information, Which is passed on to the solver of choice Which uses the information.

It is up to the underlying linear backend to use this information correctly.

---

<div class="post-metadata">

**Author:** ![michele\_barucca](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/michele_barucca/32/5350_2.png) [@michele\_barucca](https://fenicsproject.discourse.group/u/michele_barucca)\
**Post date:** [July 26, 2023, 2:27pm UTC](https://fenicsproject.discourse.group/t/null-space-explanation/11831/5 "2023-07-26T14:27:02Z")

</div>

Okey, I got this, I was wandering more about the math behind this.

---

<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:** [July 26, 2023, 2:31pm UTC](https://fenicsproject.discourse.group/t/null-space-explanation/11831/6 "2023-07-26T14:31:27Z")

</div>

Of what a null space is or of how the algorithms use a null space?

In the Poisson case it is quite straightforward

A solution uh to -\Delta uh= f with duh/dn=g is

The Poisson equation is solved by any function  
u=uh+C where C is any non-Zero constant

---

<div class="post-metadata">

**Author:** ![michele\_barucca](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/michele_barucca/32/5350_2.png) [@michele\_barucca](https://fenicsproject.discourse.group/u/michele_barucca)\
**Post date:** [July 26, 2023, 2:35pm UTC](https://fenicsproject.discourse.group/t/null-space-explanation/11831/7 "2023-07-26T14:35:47Z")

</div>

Yes, sorry, about how the algorithms use the null space.

---

<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:** [July 26, 2023, 3:50pm UTC](https://fenicsproject.discourse.group/t/null-space-explanation/11831/8 "2023-07-26T15:50:10Z")

</div>

Then I would recommend selecting and algorithm.  
You would first have to choose if you want to use a direct or iterative solver, and then look at the papers regarding the implementation of each algorithm.

You could also read [MatSetNullSpace — PETSc v3.19.3-878-g7c442164aeb documentation](https://petsc.org/main/manualpages/Mat/MatSetNullSpace/)

---

<div class="post-metadata">

**Author:** ![michele\_barucca](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/michele_barucca/32/5350_2.png) [@michele\_barucca](https://fenicsproject.discourse.group/u/michele_barucca)\
**Post date:** [July 26, 2023, 4:18pm UTC](https://fenicsproject.discourse.group/t/null-space-explanation/11831/9 "2023-07-26T16:18:05Z")

</div>

Thanks., I will try to take a look.
