Skip to content

Documentation on Implicit Complement #223

Description

@Waqar-ukaea

Following a recent discussion with Sean offline I think it would be useful for the documentation to include some information about the Implicit Complement volume in XDG.

Absolutely a must for an internal XDG developer perspective but I can also see the benefit in downstream users of XDG (i.e OpenMC devs) having a better handle of how the implicit complement is constructed and even for an OpenMC user to understand what the implicit complement is and why it is useful for a particle transport code.

I've copied in the full explanation I wrote on slack here just so i has a permanent place in case we want to reuse any of it:


What is create_implicit_complement() for?

In neutron transport codes the particle always needs to be inside an explicit volume, if its not it is a essentially a "lost particle" and that's lost data since it can't be tracked anymore. When we have an FEM mesh or .h5m model we explicitly define all of the volumes we're interested but a particle can also cross out of those defined volumes if it leaves them. So we define the implicit complement as essentially a volume representing a kind of "negative space" not mapped explicitly by the other volumes. That way if a particle leaves the explicit volumes it enters this implicit space, where it can then continue on being tracked (either terminating here, applying some boundary condition or re-entering the explicit models).

Our meshing software doesn't define this implicit volume. So we need to create it ourselves by iterating over all of the explicit volumes which is what create_implicit_complement() does.

What does get_parent_volumes() return? Is it two volumes which are touching a surface?

Essentially yeah. Since surfaces are shared between volumes a single surface always belongs to two volumes - so it has two parent volumes. And since we define the implicit complement this is true for EVERY surface not just interior volumes. So some surfaces may have one explicit volume parent whilst the other is the implicit complement.

What is create_volume() for? Is it critical? Afaict, the mfem mesh volumes are fixed after reading in from the file. I'll have to dig a little harder in the api to see if adding volumes is possible

My understanding (Patrick can correct me if i'm wrong) is that create_volume() is currently only used to create the implicit complement.


Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions