ASPECT is designed to be an extensible code. In particular, it uses both a plugin architecture and a set of signals through which it is trivial to replace or extend certain components of the program. Examples of things that are simple to extend are:
This list may also have grown since this section was written. We will discuss the way this is achieved in Sections 6.1 and 6.3. Changing the core functionality, i.e., the basic equations (1)–(3), and how they are solved is arguably more involved. We will discuss this in Section 6.6.
Since ASPECT is written in C++ using the deal.II library, you will have to be proficient in C++. You will also likely have to familiarize yourself with this library for which there is an extensive amount of documentation:
As a general note, by default ASPECT utilizes a deal.II feature called debug mode, see also the introduction to this topic in Section 4.3. If you develop code, you will definitely want this feature to be on, as it will capture the vast majority of bugs you will invariably introduce in your code.
When you write new functionality and run the code for the first time, you will almost invariably first have to deal with a number of these assertions that point out problems in your code. While this may be annoying at first, remember that these are actual bugs in your code that have to be fixed anyway and that are much easier to find if the program aborts than if you have to go by their more indirect results such as wrong answers. The Frequently Asked Questions at https://github.com/dealii/dealii/wiki/Frequently-_Asked-_Questions contain a section on how to debug deal.II programs.
The downside of debug mode, as mentioned before, is that it makes the program much slower. Consequently, once you are confident that your program actually does what it is intended to do – but no earlier! –, you may want to switch to optimized mode that links ASPECT with a version of the deal.II libraries that uses compiler optimizations and that does not contain the assert statements discussed above. This switch can be facilitated by editing the top of the ASPECT Makefile and recompiling the program.
In addition to these general comments, ASPECT is itself extensively documented. You can find documentation on all classes, functions and namespaces starting from the doc/doxygen/index.html page.