Git reference: Benchmark nist-06.
This example is a singularly perturbed problem that exhibits a boundary layer along the right and top sides of the domain.
Equation solved: Convection-diffusion equation with first order terms.
-\epsilon \nabla^{2} u + 2\frac{\partial u}{\partial x} + \frac{\partial u}{\partial y}= f.
Domain of interest: (-1, 1)^2.
Boundary conditions: Dirichlet, given by exact solution.
u(x,y) = (1 - e^{-(1 - x) / \epsilon})(1 - e^{-(1 - y) / \epsilon})cos(\pi (x + y))
where \epsilon determines the strength of the boundary layer.
Right-hand side: Obtained by inserting the exact solution into the latter equation. The corresponding code snippet is shown below:
{
public:
CustomRightHandSide(double epsilon) : DefaultNonConstRightHandSide(), epsilon(epsilon) {};
virtual double value(double x, double y) const{
return -epsilon*(-2*pow(M_PI,2)*(1 - exp(-(1 - x)/epsilon))*(1 - exp(-(1 - y)/epsilon))*cos(M_PI*(x + y))
+ 2*M_PI*(1 - exp(-(1 - x)/epsilon))*exp(-(1 - y)/epsilon)*sin(M_PI*(x + y))/epsilon
+ 2*M_PI*(1 - exp(-(1 - y)/epsilon))*exp(-(1 - x)/epsilon)*sin(M_PI*(x + y))/epsilon
- (1 - exp(-(1 - y)/epsilon))*cos(M_PI*(x + y))*exp(-(1 - x)/epsilon)/pow(epsilon,2)
- (1 - exp(-(1 - x)/epsilon))*cos(M_PI*(x + y))*exp(-(1 - y)/epsilon)/pow(epsilon,2))
- 3*M_PI*(1 - exp(-(1 - x)/epsilon))*(1 - exp(-(1 - y)/epsilon))*sin(M_PI*(x + y))
- 2*(1 - exp(-(1 - y)/epsilon))*cos(M_PI*(x + y))*exp(-(1 - x)/epsilon)/epsilon
- (1 - exp(-(1 - x)/epsilon))*cos(M_PI*(x + y))*exp(-(1 - y)/epsilon)/epsilon;
}
Final mesh (h-FEM, p=1, anisotropic refinements):
Final mesh (h-FEM, p=2, anisotropic refinements):
Final mesh (hp-FEM, h-anisotropic refinements):
DOF convergence graphs:
CPU convergence graphs:
Final mesh (hp-FEM, isotropic refinements):
Final mesh (hp-FEM, h-anisotropic refinements):
Final mesh (hp-FEM, hp-anisotropic refinements):
DOF convergence graphs:
CPU convergence graphs: