Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unstructured Mesh Tracking #1

Open
paulromano opened this issue Feb 27, 2023 · 2 comments
Open

Unstructured Mesh Tracking #1

paulromano opened this issue Feb 27, 2023 · 2 comments
Assignees

Comments

@paulromano
Copy link
Contributor

No description provided.

@paulromano
Copy link
Contributor Author

paulromano commented Mar 2, 2023

The Cell object currently stores a NeighborList, but that probably ought to be pushed down to the CSGCell class since it is not used for the DAGCell objects or the future MeshCell objects. Same consideration might also apply for the translation_ and rotation_ elements?

@pshriwise
Copy link

Some updates on the current status of this work.

Note: this post may update from time to time as we continue with this work.

Supported Element Types

This work currently targets only linear tetrahedral element types, but our aim is to support additional element types in the future with aid from the libMesh team.

Cell Creation

As it stands, a Cell object is created for each element in the mesh. It is one of the first operations performed during creation of the MeshUniverse class. There are certainly memory usage concerns with this approach and it is likely something we will revisit in the future.

Metadata

Material Assignments

Materials are set using names assigned to mesh blocks. Similar to the way we use material assignments with DAGMC, the assignment can refer to a material either by name or by ID. A match by name will be attempted first, then a match by ID. If no name provided on a mesh block, it is considered to be a void region. A mesh block is also considered to be a void region if the name is explicitly "vacuum" or "void".

Once a material assignment is identified, all of the cells in the corresponding block are assigned to that material.

Boundary Conditions

Boundary conditions are specified as names on sidesets and, if present, they must be one of "reflective", "white", "transmission", or "vacuum" (one of the supported surface boundary types in OpenMC). If no name is specified on a sideset, it is assumed to be a transmissive boundary condition.

Particle data

Right now, the mesh universe and index is tracked by re-using the lattice_bin parameter in particle_data.h. Because a particle cannot exist in both a lattice and mesh universe at the same level of the geometry, it should be safe to do so.

Its name has been updated to lattice_or_mesh_bin and the particle data accessors mesh_index() and lattice_index() have been added to the particle_data class to avoid confusion when using this data member in different contexts throughout the code.

Mesh Index and next cell

When a particle is located in a MeshUniverse, the current cell (element) is tracked using the LocalCoord object as is normally done.

The next mesh cell is stored as the mesh_index() (probably better named as next_mesh_index()). This is set during the Particle::event_advance call to avoid doing another ray tracing operation at the point in time where we cross an element boundary.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: In Progress
Development

No branches or pull requests

2 participants