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.

  • 1
    $\begingroup$ 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. $\endgroup$ Mar 16 at 8:14
  • 1
    $\begingroup$ 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. $\endgroup$ Mar 16 at 8:15
  • $\begingroup$ At 3.) Have you seen this? reference.wolfram.com/language/FEMDocumentation/tutorial/… $\endgroup$ Mar 16 at 8:18
  • $\begingroup$ "What FEM does on top of NDSolve?" Once again, "NDSolveFEM" is a backend for NDSolve and allows you to use also nonrectangular domains. $\endgroup$ Mar 16 at 8:20
  • $\begingroup$ @HenrikSchumacher, so the mesh order is automatic. I haven't seen the complete tutorial, thank you. $\endgroup$
    – confused
    Mar 16 at 8:48
  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.
  • $\begingroup$ @xzczd thanks for the edit now I know how to do `` NDSolveFEM `` $\endgroup$
    – user21
    Mar 17 at 8:05
  • $\begingroup$ No - does not seem to work :-( but thanks anyways! $\endgroup$
    – user21
    Mar 17 at 8:06
  • 1
    $\begingroup$ Comment is a bit different, you need `NDSolve\`FEM\``. $\endgroup$
    – xzczd
    Mar 17 at 8:09
  • $\begingroup$ @xzczd, great thanks! NDSolve`FEM` $\endgroup$
    – user21
    Mar 17 at 9:12

This site is temporarily in read only mode and not accepting new answers.

Not the answer you're looking for? Browse other questions tagged .