Literature material discussing generic frameworks to solve PDEs

I am trying to gather literature material to study how people propose to implement generic frameworks to solve partial differential equations in C++.

Despite my effort to search the web, the only thing I found so far is the Programmer's Guide of OpenFOAM, which in chapter 1 and 2 gives an idea of the mapping between mathematical entities and C++ classes in order to create a domain specific language for the solution of partial differential equations.

So, to have a broader view of what has been proposed so far, I would like to ask the experts out there:

What are the current state of the art references in this field?

Any suggestion ranging from a journal paper to an actual library documentation will be appreciated.

• I currently work with OpenFOAM. A glance at the documentation you link to suggests that it's outdated; I think the tensor classes have been replaced by other objects that implement the same functionality. (At least from the OpenFOAM Doxygen documentation; I can't say that the OpenFOAM docs are terribly helpful.) – Geoff Oxberry Jun 4 '13 at 6:46
• I highly recommend reading Yadir Shapira's book. – Paul Jun 19 '13 at 1:45

While there are some books on the implementation of finite element methods (e.g., Mark Gockenbach's Understanding and Implementing the Finite Element Method and Yair Shapiro's Solving PDEs in C++: Numerical Methods in a Unified Object-Oriented Approach), I think it would indeed be most useful to look at (and compare!) actual large-scale libraries:

1. There are a few publications on the details of deal.II

2. There is a book on FEniCS including chapters about the design and implementation of the components, which are also described in various papers.

3. References on the design of DUNE can be found here.

(The main developers of the first two are on this list, and are sure to expand on this.)

• The better references for deal.II are actually on dealii.org/developer/publications/index.html#referencing , in particular the 2007 ACM TOMS paper. – Wolfgang Bangerth Jun 4 '13 at 1:03
• I'd add Trilinos to that list. Also, even though it's not written in C++, PETSc is written in C in an object-oriented style. The code is readable, and has extensive documentation (there are also PETSc developers on this site). FEniCS and deal.II both interface with PETSc. – Geoff Oxberry Jun 4 '13 at 6:41
• @GeoffOxberry - The question was specifically about frameworks for PDEs (discretization, mesh handling, matrix assembly), which I don't think PETSc offers. Trilinos does have such components (FEI, Intrepid), but I couldn't find any references on them, which is why I didn't include it. – Christian Clason Jun 4 '13 at 7:33
• @ChristianClason: I agree that the question is specifically about frameworks for PDEs. There's nothing specific about discretization, mesh handling, etc. in the question (aside from possibly the OpenFOAM link); that's a question of what part of the abstraction hierarchy you want to examine. PETSc provides data structures, but doesn't automatically do discretization, mesh handling, etc. Deal.II, FEniCS, and supposedly OpenFOAM (though I haven't seen any PETSc source code in there) all have a PETSc back end, if the OP is interested in how to implement a PDE DSL in C++. – Geoff Oxberry Jun 4 '13 at 8:46
• @GeoffOxberry - That makes sense; I just read the question more narrowly than you did, which means likely too narrowly. How about I edit my answer to make it clear I'm specifically addressing the PDE side, while you add an answer with technical references for the linear algebra side? (Or edit this answer to include them -- feel free to make it CW then.) – Christian Clason Jun 4 '13 at 8:54

I recommend looking at different library docs:

• Beat me to it! :) – Christian Clason Jun 3 '13 at 19:28

By a chance I have spotted your question. I would suggest to look at these:

http://www.iue.tuwien.ac.at/phd/heinzl/  Rene Heinzl
dissertation,    Concepts for Scientific Computing,

http://www.math.tu-cottbus.de/~berti/diss/, Guntram Berti
dissertation,    Generic Software Components for Scientific
Computing.


Documentation for GetFEM++ package