-
Notifications
You must be signed in to change notification settings - Fork 5
Description
Currently, bespoke boundary conditions are included through the generate function by masking. That is, boundary conditions are not automated. There are two ways that this is done:
- Through the
generatefunction, such as inpoiseuilleandbc_debug. Masks are implemented as bespoke operators. - Through collages, such as in
stokes_aswell.jlhere which uses UWDs to specify meshes with their boundaries. A collage is "manual" in the sense that users need to write functions for each boundary. (e.g,left_wall_idxshere). Collages require the user to specify an additional Decapode with the boundary morphisms, a relation diagram mapping the mesh to its boundaries, as well as the resulting Decapode collage produced throughcollate.
Both methods require new functions implemented into generate to specify the indices of the boundary and apply the correct value.
We'd like a way of automating this process further. Through FreeDiagram and the @diagram macro in Catlab, we have the ability of freely-constructing a diagram. We can use this to build a diagram of meshes which stores a hierarchy of subobjects for meshes, including the original mesh as well as boundaries, their boundaries, etc. We can use this to programmatically select boundaries and apply boundary conditions.
We can implement map for Diagrams (if not currently implemented) to broadcast functions onto the mesh hierarchy. Rather than passing in a mesh to the compiler, we can pass in the diagram of meshes. This way, the relationship between meshes and their boundaries are sustained throughout the entire decapodes workflow.
Because boundary conditions are also enforced through the generate function, it makes sense to have the Mesh Hierarchy also carry around functions traditionally stored in the generate function; for example, while foo may be defined over the mesh bar may be defined over
This is a large lift impacting most aspects of Decapodes, so this implementation will create a breaking release.