
Code Verification with Method of Manufactured Solutions
CodeVerification


Attachments

Changes

View Source

View
# Overview
 Method of Manufactured Solutions (MMS) is a useful tool for code verification (making sure that your mathematical model is being properly solved).
 MMS works by assuming a solution, substituting it into the PDE, and obtaining a "forcing term".
 The modified PDE (with forcing term added) is then solved numerically; the result can be compared to the assumed solution.
 By checking the norm of the error on successively finer grids you can verify your code obtains the theoretical convergence rate (i.e. that you don't have any code bugs).
[]()
MMS Example:
PDE: $$\nabla \cdot \nabla u = 0$$
Assumed solution: $$u = \sin(\alpha\pi x)$$
Forcing function: $$f = \alpha^2 \pi^2 \sin (\alpha \pi x)$$
Need to solve: $$\nabla \cdot \nabla u  f = 0$$
[]()
# Error Analysis
 To compare two solutions (or a solution and an analytical solution) $$f_1$$ and $$f_2$$, the following expressions are frequently used:
$$$
f_1f_2^2_{L_2(\Omega)} = \int_{\Omega} (f_1f_2)^2 \;\text{d}\Omega
\\
f_1f_2^2_{H_{1,\text{semi}}(\Omega)} = \int_{\Omega} \left\nabla \left(f_1f_2\right)\right^2 \;\text{d}\Omega
$$$
 From finite element theory, we know the convergence rates of these quantities on successively refined grids.
 They can be computed in a MOOSEbased application by utilizing the `ElementL2Error` or `ElementH1SemiError` `Postprocessors`, respectively, and specifying the analytical solution with `Functions`.
[Example 14](/wiki/MooseExamples/Example_14/)