# Lab assignment 1: Due Friday April 3, 18:00 EDT

For this assignment,
you will need a set up to work with Python code,
in particular, to develop Jupyter notebooks,
as well as a GitHub account to share your notebooks.

We will solve the following boundary value problem by a finite element method.
$$
\begin{cases}
-\Delta u = f&\textrm{in}\,\,\Omega,\\
u = g &\textrm{on}\,\,\partial\Omega.
\end{cases}\qquad\qquad(*)
$$

## Part 1: Implementation

*Reference*: J. Alberty, C. Carstensen & S.A. Funken.
Remarks around 50 lines of Matlab.
- Taking inspiration from the reference, implement an affine finite element method for the Poisson equation in 2D.
- Your code should be able to handle at least one convex domain (such as a square or a triangle),
and a domain with a reentrant corner (such as an L-shaped domain).
- It should also be able to handle inhomogeneous Dirichlet boundary conditions.
- Implement either the red refinement or a bisection procedure for mesh subdivision.

## Part 2: Numerical experiments

- Pick a convex domain $\Omega$ and a smooth function $u$, and compute $f=-\Delta u$ in $\Omega$.
Then solve (*) with $f$ just computed and with $g=u|_{\partial\Omega}$, on several grids with decreasing meshsize.
- Plot the $H^1$-error of the finite element solution against the meshsize $h$ on a logarithmic scale,
and estimate the convergence rate $\alpha$ in $error\sim h^\alpha$ from the graph. Is it consistent with theory?
- Repeat the preceding exercise for the $L^2$-error of the finite element solution. Explain the results.
- Repeat the preceding 3 exercises for a smooth function $u$ on a domain with a reentrant corner. Explain the results.
- In a domain with a reentrant corner, consider a solution of the form $u(r,\theta)=r^a\sin(a\theta)$,
where the coordinate origin is at the reentrant corner, and the rays $\theta=0$ and $\theta=\pi/a$ correspond to the two sides of the corner.
For example, for an L-shaped domain, we would have $a=\frac23$.
This is the function from Assignment 1, Problem 5.
Repeat exercises 1–3.
If your code allows, experiment with a couple of different values of $a$, that is, with different values of the reentrant angle.
Explain the results.

## How and what to submit

Please submit links to your Jupyter notebooks on GitHub by email,
**before Friday April 3, 18:00 EDT**.
- Include theory and commentaries in your Jupyter notebooks, by using Markdown cells.
- Notebooks without sufficient commentaries will not be accepted.
- You can update your notebooks up to the time limit, but please do not commit any overdue updates.

The subject line of the email should be:
- [Math 579 Lab 1] Yourname