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

$-\mathrm{d} \mathrm{d}^{\ast} \varphi^n = f^n,$

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

\begin{split}\left\lbrace \begin{aligned} u ^1 &= \mathrm{d}^{\ast}\varphi^2 ,\\ - \mathrm{d} u^1 &= f^2. \end{aligned}\right.\end{split}

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

$\varphi = - \sin(2\pi x) \sin(2\pi y).$

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.

Parameters:
degreeint

The degree of the mimetic spectral elements.

Kint

In total we will use $$4 * K * K$$ elements.

cfloat, default=0

The 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

Parameters:
degreeint

The degree of the mimetic spectral elements.

Kint

In total we will use $$4 * K * K$$ elements.

cfloat, default=0

The 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🖼.