• 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_1-f_2||^2_{L_2(\Omega)} = \int_{\Omega} (f_1-f_2)^2 \;\text{d}\Omega \\ ||f_1-f_2||^2_{H_{1,\text{semi}}(\Omega)} = \int_{\Omega} \left|\nabla \left(f_1-f_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 MOOSE-based application by utilizing the ElementL2Error or ElementH1SemiError Postprocessors, respectively, and specifying the analytical solution with Functions.

Example 14