# 🟢 div-grad#

Here we demonstrate how to use *phyem* to solve the div-grad problems in different dimensions and
different domains.

The general form of the div-grad problem is

where \(\varphi^n\) and \(f^n\) are top forms.

## 2d periodic boundary conditions#

Here we demonstrate how to use *phyem*, the *msepy* implementation, to solve the two-dimensional div-grad problem.

In two-dimensions, the mixed formulation of the div-grad problem is

We use smooth manufactured solutions for this case. The exact solution for \(\varphi\) is

Exact solutions of \(u^1\) and \(f^2\) then follow. We consider the domain to be \(\Omega = (x,y) \in [0,1]^2\) and it is fully periodic. We use the Multi-crazy domain and mesh for this test. The solver is given below.

- div_grad_2d_periodic_manufactured_test(
degree,K,c=0)[source]#

- Parameters:

degreeintThe degree of the mimetic spectral elements.

KintIn total we will use \(4 * K * K\) elements.

cfloat, default=0The deformation factor of the Multi-crazy domain and mesh.

- Returns:

- phi_error: float
The \(L^2\)-error of solution \(\varphi_h^2\).

- u_error: float
The \(L^2\)-error of solution \(u_h^1\).

### Examples#

Below, we use mimetic spectral elements of degree 2 on a uniform mesh of \(4 * 4 * 4\) \((K=4)\) elements.

```
>>> errors4 = div_grad_2d_periodic_manufactured_test(2, 4)
>>> errors4[0]
0.01...
```

We increase \(K\) to \(K=8\), we do

```
>>> errors8 = div_grad_2d_periodic_manufactured_test(2, 8)
```

We can compute the convergence rate of the \(L^2\)-error of solution \(\varphi_h^2\) by

```
>>> import numpy as np
>>> rate = (np.log10(errors4[0]) - np.log10(errors8[0])) / (np.log10(1/4) - np.log10(1/8))
>>> round(rate, 1)
2.0
```

The optimal convergence rate is obtained.

## 2d general boundary conditions#

Here we repeat the test, but with essential boundary \(\mathrm{tr}\ u^1\) on faces \(y=0\) and \(y=1\), and natural boundary condition \(\mathrm{tr}\left(\star \varphi^2\right)\) on faces \(x=0\) and \(x=1\).

The implementation is

- div_grad_2d_general_bc_manufactured_test(
degree,K,c=0.0)[source]#

- Parameters:

degreeintThe degree of the mimetic spectral elements.

KintIn total we will use \(4 * K * K\) elements.

cfloat, default=0The deformation factor of the Crazy domain and mesh.

- Returns:

- phi_error: float
The \(L^2\)-error of solution \(\varphi_h^2\).

- u_error: float
The \(L^2\)-error of solution \(u_h^1\).

### Examples#

If we solve it with \(4\times4\) elements (note that here we use a different mesh compared to the periodic test) at polynomial degree 2,

```
>>> errors4 = div_grad_2d_general_bc_manufactured_test(2, 4)
>>> errors4[0]
0.06...
```

We increase \(K\) to \(K=8\), we do

```
>>> errors8 = div_grad_2d_general_bc_manufactured_test(2, 8)
```

We can compute the convergence rate of the \(L^2\)-error of solution \(\varphi_h^2\) by

```
>>> import numpy as np
>>> rate = (np.log10(errors4[0]) - np.log10(errors8[0])) / (np.log10(1/4) - np.log10(1/8))
>>> round(rate, 1)
2.0
```

Again, the optimal convergence rate is obtained.

↩️ Back to Gallery🖼.