Skip to content

Geometry And Materials

This page describes the geometry and material surfaces that are currently public for neomc users.

Geometry Query Contract

The generic runtime contract is GeometryQuery. A concrete geometry backend is expected to provide:

  • locate
  • distance_to_boundary
  • safety
  • material
  • tally_region

These operate on:

  • GeometryState
  • BoundaryHit
  • RegionId
  • MaterialId
  • optional TallyId

Most users will not construct GeometryQuery by hand. They will use a concrete geometry type and wrap it in GeometryHandle.

Geometry Ownership

GeometryHandle carries:

  • the runtime GeometryQuery
  • an owning or borrowing pointer

Use:

  • borrow_geometry
  • hold_geometry
  • make_geometry_handle

This is the standard way to pass geometry into CoupledEmModel, MixedTransportModel, or SimulationTransportSession.

Rectilinear Grid Geometry

RectilinearGrid is the simplest concrete geometry backend in the public headers.

Definition Surfaces

Two input styles are supported:

  • RectilinearGridDefinition
    • direct MaterialId binding
  • RectilinearGridInputDefinition
    • material names resolved through MaterialDefinition

Use:

  • make_rectilinear_grid(RectilinearGridDefinition)
  • make_rectilinear_grid(RectilinearGridInputDefinition, materials)

Capabilities

RectilinearGrid exposes:

  • region count and dimension queries;
  • region volume and bounds;
  • region-name lookup;
  • locate;
  • distance_to_boundary;
  • safety;
  • region-to-material lookup;
  • region-to-tally-region lookup.

This is the current public structured-mesh geometry path.

CSG Geometry

CsgGeometry is the public constructive solid geometry backend.

Supported Surface Types

CsgSurfaceType supports:

  • plane
  • sphere
  • x_cylinder
  • y_cylinder
  • z_cylinder

Cell Construction

CsgGeometryDefinition contains:

  • surfaces
  • cells

Each CsgCellDefinition carries:

  • a list of halfspaces;
  • a material;
  • a tally region;
  • optional bounds;
  • a cell name.

Helper constructors include:

  • csg_plane
  • csg_sphere
  • csg_x_cylinder
  • csg_y_cylinder
  • csg_z_cylinder
  • csg_negative
  • csg_positive

This is the current public analytic geometry path.

Material Definitions

The high-level authoring type is MaterialInputDefinition, which contains:

  • a material name;
  • density in g/cm^3;
  • elemental components.

The resolved type is MaterialDefinition, which adds:

  • MaterialId
  • PhysicsTableId

Use:

  • material_definition_from_input
  • material_definitions_from_inputs
  • materials_from_definitions

Material Components

ElementMaterialComponentDefinition describes one elemental component by:

  • element symbol;
  • fraction;
  • fraction basis.

Helpers:

  • element_atom_fraction
  • element_mass_fraction

The lower-level runtime type is MaterialComponent, which supports both:

  • element components;
  • nuclide components.

Its supported fraction bases are:

  • atom
  • mass

Material Tables And Lookup

Useful public helpers include:

  • material_element_records
  • material_id_by_name
  • material_definition_by_id
  • nist_material_input
  • require_nist_material_input
  • nist_material_names
  • validate_material_input_definition
  • validate_material_definition

At runtime, Material contains:

  • material_id
  • density_g_cm3
  • normalized or authored components
  • table_binding

Material Catalog

material_catalog.hh exposes a NIST-like material catalog through:

  • nist_material_input
  • require_nist_material_input
  • nist_material_names

This is useful for application-layer and benchmark setups that want named material presets without rebuilding each composition manually.

User-Facing Interpretation

From a user perspective:

  • geometry owns region and boundary semantics;
  • materials own composition and density;
  • geometry and materials meet through MaterialId;
  • tallies can optionally bind to named regions or tally regions exported by the geometry.

NeoMC user documentation.