4

I have few conceptual questions concerning FEM -all are conceptual and their answers might be intertwined hence I ask all in 1 post-:

  1. What FEM does on top of NDSolve? Because NDSolve already divide the domain on a mesh . Here some triggers which automatically activating a FEM solver explained. Sometimes FEM is also used in more detail as in this question - great title btw- as well.

  2. When I solve a system of PDE's by NDSolve, would writing everything from scratch with NDSolve`FEM` be a valid way of crosscheck? Or should one prefer MATLAB or FEniCS for crosschecking?

  3. Without getting in too much theory, where can I learn FEM with application? I want to learn how to use it properly, including dealing with convergence problems or choosing the correct primary space for a type of equation. Also I checked Wolfram archives for MMA but couldn't come across with something up to date.

Thank you for your time.

confused
  • 191
  • 10
  • 1
    At 3.) To my knowledge, Mathematica uses $P_2$ and $S_2$ elements by default for spatial problems. One can also use $P_1$ and $S_1$ instead by using the option "MeshOrder"->1. – Henrik Schumacher Mar 16 '21 at 08:14
  • 1
    At 1. + 2.) "When I solve a system of PDE's by NDSolve, would writing everything from scratch with "NDSolve`FEM`" be a valid way of crosscheck?" "NDSolve`FEM`" is used as the backend of the FEM capabilities of NDSolve. (When NDSolve is called with the option Method -> {"FiniteElement"} or when a Region or MeshRegion is supplied as domain.) So this would not really be a cross check. – Henrik Schumacher Mar 16 '21 at 08:15
  • At 3.) Have you seen this? https://reference.wolfram.com/language/FEMDocumentation/tutorial/FiniteElementOverview.html – Henrik Schumacher Mar 16 '21 at 08:18
  • "What FEM does on top of NDSolve?" Once again, "NDSolveFEM" is a backend for NDSolve and allows you to use also nonrectangular domains. – Henrik Schumacher Mar 16 '21 at 08:20
  • @HenrikSchumacher, so the mesh order is automatic. I haven't seen the complete tutorial, thank you. – confused Mar 16 '21 at 08:48

1 Answers1

3
  1. NDSolve calls the functions from NDSolve`FEM`. This is explained in the finite element programming tutorial. The reasons this exists is that customers can intercept the FEM solution process at any stage and modify it in any why they wish. It's also useful to develop and explain new FEM related functions like done for NDEigensystem. The FEM sub module provides you with the possibility to do things that are currently not possible from an NDSolve level. (Model order reduction, Rayleigh damping, etc, etc) The question you link in your item 1) does not need the FEM context.
  2. No. Because NDSolve and the FEM context are the same code, just different interfaces. To validate your code you can have a look at the section Verifying Solutions. Of course using different FEM tools to cross validate a result is also a very valid approach. For some PDE models there are verification notebooks.
  3. As an initial exposure for FEM with applications I usually recommend the Solving Partial Differential Equations with Finite Elements. A more in depth tutorial is then the finite element programming tutorial. Unfortunately, there is no 'FEM theory' tutorial and with the amount of work I have it's unlikely to come soon. A good mathematica FEM introduction is Bhatti. I refer to this and it's sequel often.
xzczd
  • 65,995
  • 9
  • 163
  • 468
user21
  • 39,710
  • 8
  • 110
  • 167