DAGMC H5M Files#
The primary output format. Creates triangular surface meshes for use with DAGMC-enabled transport codes (OpenMC, MCNP, FLUKA, etc.).
Basic Export#
import cadquery as cq
from cad_to_dagmc import CadToDagmc
assembly = cq.Assembly()
assembly.add(cq.Workplane("XY").sphere(10), name="sphere")
model = CadToDagmc()
model.add_cadquery_object(assembly, material_tags=["tungsten"])
model.export_dagmc_h5m_file(
filename="dagmc.h5m",
min_mesh_size=0.5,
max_mesh_size=10.0,
)
With Different Backends#
Choose between h5py (default) and pymoab backends:
import cadquery as cq
from cad_to_dagmc import CadToDagmc
sphere1 = cq.Workplane().sphere(5)
sphere2 = cq.Workplane().moveTo(10, 0).sphere(2)
assembly = cq.Assembly()
assembly.add(sphere1)
assembly.add(sphere2)
model = CadToDagmc()
model.add_cadquery_object(cadquery_object=assembly, material_tags=["mat1", "mat2"])
# Export using h5py backend (default, no MOAB needed)
model.export_dagmc_h5m_file(
filename="dagmc_h5py.h5m",
h5m_backend="h5py",
)
# Export using pymoab backend (requires MOAB installation)
model.export_dagmc_h5m_file(
filename="dagmc_pymoab.h5m",
h5m_backend="pymoab",
)
With Meshing Backends#
Choose between the cad-to-dagmc-mesher (default) and GMSH meshing backends:
# cad-to-dagmc-mesher backend (default) - surface and volume meshing
model.export_dagmc_h5m_file(
filename="dagmc.h5m",
meshing_backend="cad-to-dagmc-mesher",
tolerance=0.5,
angular_tolerance=0.2,
)
# GMSH backend - full control over mesh parameters
model.export_dagmc_h5m_file(
filename="dagmc.h5m",
meshing_backend="gmsh",
min_mesh_size=0.5,
max_mesh_size=10.0,
mesh_algorithm=1,
)
API Reference#
export_dagmc_h5m_file()#
Common Parameters:
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
str |
“dagmc.h5m” |
Output file path |
|
float |
1.0 |
Geometry scale factor. See the note below on how it affects the units of the linear mesh sizing parameters |
|
|
|
Shared-surface imprint mode. |
|
|
|
Keyword-only thread count for imprinting. See Imprinting for validation and scope. |
|
|
|
Keyword-only thread count for cad-to-dagmc-mesher meshing after the imprint. Fewer threads lower peak RAM; the mesh is the same. The gmsh backend warns that it is unused. See Parallel Processing. |
|
str |
None |
Void space material tag |
Backend Selection:
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
str |
auto |
|
|
str |
“h5py” |
|
GMSH Backend Parameters:
These parameters only apply when using meshing_backend="gmsh" (or when auto-selected):
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
float |
None |
Minimum mesh element size |
|
float |
None |
Maximum mesh element size |
|
int |
1 |
GMSH 2D surface meshing algorithm |
|
int |
1 |
GMSH 3D volume algorithm: 1 = Delaunay, 10 = HXT |
|
dict |
None |
Numeric/string GMSH options applied after surface meshing, before volume meshing; only used with |
|
str |
“file” |
CAD transfer method: |
|
dict |
None |
Per-volume mesh sizes. Keys can be volume IDs (int) or material tag names (str). |
|
list |
None |
Volume IDs (int) or material tags (str) for conformal volume mesh |
|
str |
“umesh.vtk” |
Output filename for unstructured volume mesh |
mesh_algorithm_3d and volume_mesh_options configure the volume step without
changing how the DAGMC surfaces are initially meshed. See
3D algorithms and volume-only options
for HXT and relaxed interior sizing. The existing surface mesh is reused for
the unstructured output.
cad-to-dagmc-mesher Backend Parameters:
These parameters only apply when using meshing_backend="cad-to-dagmc-mesher":
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
float |
0.5 |
Linear tolerance for the surface mesh, in cm after |
|
float |
0.2 |
Angular tolerance for the surface mesh |
|
Iterable[str] |
None |
Material tag names of the volumes to fill with tetrahedra |
|
float |
None |
Target tetrahedron edge length, in scaled-geometry units |
|
str |
“umesh.vtk” |
Output filename for unstructured volume mesh |
Important
scale_factor and the units of linear mesh sizes. All the linear mesh sizing
parameters are in the units of the scaled geometry, so the same number means
the same deflection on the output mesh whichever backend you use:
Backend |
Linear sizing parameters |
|---|---|
|
|
|
|
OpenMC works in centimetres, so set scale_factor to bring the CAD to cm (for
example scale_factor=100 for a model in metres). The cad-to-dagmc-mesher default
tolerance of 0.5 is then a 5 mm deflection.
angular_tolerance is an angle and is unaffected by scale_factor.
tet_volumes and target_edge_length must be given together to write a volume mesh.
Warning
Do not mix GMSH and cad-to-dagmc-mesher backend parameters in the same call. If you provide parameters from both backends without explicitly setting meshing_backend, an error will be raised.
Returns:
str- Path to the created h5m fileOr
tuple[str, str]- (h5m_path, vtk_path) when a volume mesh is also written, which is whenunstructured_volumesis set on the GMSH backend, or whentet_volumesandtarget_edge_lengthare set on the cad-to-dagmc-mesher backend
Using in OpenMC#
Load the DAGMC geometry in OpenMC:
import openmc
# Define materials (names must match material tags)
tungsten = openmc.Material(name="tungsten")
tungsten.add_element("W", 1.0)
tungsten.set_density("g/cm3", 19.3)
steel = openmc.Material(name="steel")
steel.add_element("Fe", 1.0)
steel.set_density("g/cm3", 7.8)
materials = openmc.Materials([tungsten, steel])
# Load the DAGMC geometry
dag_universe = openmc.DAGMCUniverse(filename="dagmc.h5m")
geometry = openmc.Geometry(root=dag_universe.bounded_universe())
# Set up settings
settings = openmc.Settings()
settings.batches = 10
settings.particles = 1000
settings.run_mode = "fixed source"
model = openmc.Model(geometry=geometry, materials=materials, settings=settings)
model.run()
See Also#
H5M Backends - h5py vs pymoab comparison
GMSH Backend - GMSH meshing options
cad-to-dagmc-mesher Backend - cad-to-dagmc-mesher meshing options
Conformal Meshes - Combined surface and volume output