Implement a runtime polymorphism pattern [1] to emulate an abstract parent of the bc_math/bc_wall classes.
TODO: Modernize by 1. Refactoring math/wall so they extend bc_poly, 2. Replace all TYPE(bc_poly) with CLASS(bc_poly), and
3. Make bc_poly ABSTRACT.
Element type for use in dynamically allocating arrays of material objects
(TODO: Modernize by replacing matptr arrays with allocatable or assumed-shape arrays of material objects.)
Nodes of different colours represent the following:
Solid arrows point from a derived type to the parent type which it
extends. Dashed arrows point from a derived type to the other
types it contains as a components, with a label listing the name(s) of
said component(s). Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.