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:
locatedistance_to_boundarysafetymaterialtally_region
These operate on:
GeometryStateBoundaryHitRegionIdMaterialId- 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_geometryhold_geometrymake_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
MaterialIdbinding
- direct
RectilinearGridInputDefinition- material names resolved through
MaterialDefinition
- material names resolved through
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:
planespherex_cylindery_cylinderz_cylinder
Cell Construction
CsgGeometryDefinition contains:
surfacescells
Each CsgCellDefinition carries:
- a list of halfspaces;
- a material;
- a tally region;
- optional bounds;
- a cell name.
Helper constructors include:
csg_planecsg_spherecsg_x_cylindercsg_y_cylindercsg_z_cylindercsg_negativecsg_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:
MaterialIdPhysicsTableId
Use:
material_definition_from_inputmaterial_definitions_from_inputsmaterials_from_definitions
Material Components
ElementMaterialComponentDefinition describes one elemental component by:
- element symbol;
- fraction;
- fraction basis.
Helpers:
element_atom_fractionelement_mass_fraction
The lower-level runtime type is MaterialComponent, which supports both:
- element components;
- nuclide components.
Its supported fraction bases are:
atommass
Material Tables And Lookup
Useful public helpers include:
material_element_recordsmaterial_id_by_namematerial_definition_by_idnist_material_inputrequire_nist_material_inputnist_material_namesvalidate_material_input_definitionvalidate_material_definition
At runtime, Material contains:
material_iddensity_g_cm3- normalized or authored components
table_binding
Material Catalog
material_catalog.hh exposes a NIST-like material catalog through:
nist_material_inputrequire_nist_material_inputnist_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.