Sundance 2.0 is a complete redesign and rewrite of
Sundance.
Your version 1.0 codes will not run with version 2.0
Symbolics
-
The entire symbolic system has been rewritten to improve performance and algorithmic scalability. Version 1.0 symbolic object construction time scaled exponentially with the number of nodes in the expression graph. Version 2.0 expression construction and evaluation scales linearly with the number of nodes in the expression graph. Expression preprocessing scales (worst case) as the cube of the number of continuous field variables; preprocessing time is generally not noticeable, but can be a few seconds in problems (such as discrete ordinate rad transfer models) having dozens of continuous field variables.
-
The algorithm used inside the symbolic engine is automatic functional differentiation, which carries out interleaved functional and spatial differentiation in an optimally efficient way.
Meshes
-
The version 1.0 mesh object has been replaced with an abstract interface. An efficient, lightweight implementation for simplices is provided.
-
Relative to version 1.0, mesh construction in 3D is an order of magnitude faster.
Decoupling of symbolics, mesh, and finite-element components
-
Sundance 1.0 was a completely integrated design, which simplified some things, but made interoperability difficult. In version 2.0, the symbolic engine, mesh, and finite-element components have been decoupled. The mesh and symbolics are completely independent of one another, and the connection between these two subpackages and the finite-element objects (basis functions, etc) is done entirely through abstract interfaces. In particular, the FE system talks to the mesh through an abstract interfaces, allowing the use of your favorite mesh object; you just need to implement the
MeshBase
interface.
Version 1 features not yet ready in version 2
-
Parameter
expressions can't be used as unknowns.
-
Block equations aren't supported.
-
The ability to use symbolic expressions in cell filters isn't ready yet. Use positional cell predicates as illustrated in the examples.
-
All fields must be defined throughout the domain. It is thus not possible to define a design variable on a subset of the domain, or to set up a fluid-structure interaction problem.
-
All fields must have the same basis function. Thus, mixed discretizations are not allowed.
-
Simplexes only. Hexes and quads would be easy to add, but I have little reason to do so.
Various changes to the user interface
-
v 1.0
CellSet
has been changed to CellFilter
which better describes the role of that object.
-
v 1.0
StaticLinearProblem
has been changed to LinearProblem
to save some typing.
-
Creation of discrete functions is considerably simplified, particulary for vector-valued functions.
-
Creation of nonlinear problems is considerably simplified.
-
Creation of linear and nonlinear PDE-constrained optimization problems is considerably simplified.