cad-to-dagmc-mesher Backend#
The cad-to-dagmc-mesher backend is a purpose-built mesher for DAGMC geometry. It creates triangle surface meshes using constrained Delaunay triangulation and can also fill volumes with tetrahedra, so it can produce both DAGMC h5m files and unstructured volume mesh vtk files without GMSH. It is installed automatically with the pip package, but it is not on conda-forge, so a Conda/Mamba installation needs pip install cad-to-dagmc-mesher to use it. See Installation.
Surface Mesh (h5m)#
import cadquery as cq
from cad_to_dagmc import CadToDagmc
assembly = cq.Assembly()
assembly.add(cq.Workplane("XY").sphere(10))
model = CadToDagmc()
model.add_cadquery_object(assembly, material_tags=["mat1"])
model.export_dagmc_h5m_file(
filename="dagmc.h5m",
meshing_backend="cad-to-dagmc-mesher",
tolerance=0.01,
angular_tolerance=0.2,
)
Volume Mesh (vtk)#
The backend can write a tetrahedral unstructured volume mesh for use with
openmc.UnstructuredMesh(filename, library="moab"):
model.export_unstructured_mesh_file(
filename="umesh.vtk",
meshing_backend="cad-to-dagmc-mesher",
target_edge_length=2.0,
)
Passing target_edge_length (or tet_volumes) selects this backend automatically, so meshing_backend can be omitted:
model.export_unstructured_mesh_file(
filename="umesh.vtk",
target_edge_length=2.0,
)
Surface and Volume Mesh in One Call#
export_dagmc_h5m_file can write the DAGMC h5m file and the unstructured volume mesh vtk file from a single meshing call. The two meshes are conformal: for tet-meshed volumes the surface is remeshed to near-equilateral triangles at target_edge_length, that surface is used as the DAGMC tracking surface, and the volume mesher fills it with tetrahedra whose boundary follows that surface (individual surface triangles may be subdivided in the volume mesh, and on high curvature faces small local deviations up to the chordal error of the tetrahedron edge length can occur). Provide both tet_volumes and target_edge_length and the export returns a (dagmc_filename, umesh_filename) tuple:
dagmc_filename, umesh_filename = model.export_dagmc_h5m_file(
filename="dagmc.h5m",
tet_volumes=["mat1"], # material tag names of volumes to fill with tets
target_edge_length=2.0,
umesh_filename="umesh.vtk",
)
Parameters#
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
float |
0.01 |
Linear deflection tolerance for the surface mesh, in the units of the scaled geometry |
|
float |
0.2 |
Angular deflection tolerance for the surface mesh |
|
float |
None |
Target tetrahedron edge length for the volume mesh, in the units of the scaled geometry |
|
Iterable[str] |
None |
Material tag names of the volumes to fill with tetrahedra |
Tolerance explanation:
tolerancecontrols how far the surface mesh can deviate from the true surface (linear distance)angular_tolerancecontrols the maximum angle between adjacent facet normalstarget_edge_lengthcontrols the size of the tetrahedra in the volume mesh
Important
tolerance and target_edge_length are lengths in the units of the scaled
geometry, because this backend applies scale_factor to the geometry before
meshing it.
So if you pass scale_factor=100 to convert a model from metres to centimetres,
tolerance is in centimetres. The 0.01 default then means a 0.1 mm deflection,
which on a large model can produce an enormous number of facets and exhaust
memory. Scale the tolerance along with the geometry: for a metre-scale model
exported with scale_factor=100, something like tolerance=0.5 (5 mm) is a more
reasonable starting point.
The gmsh and cadquery backends take their linear mesh sizes in scaled-geometry
units too, so a given number means the same deflection whichever backend you use.
angular_tolerance is an angle and is unaffected by scaling.
Backend Auto-Selection#
When meshing_backend is not given, the tet arguments select this backend automatically:
export_unstructured_mesh_file(..., target_edge_length=...)uses cad-to-dagmc-mesher; without tet arguments it uses gmsh.export_dagmc_h5m_file(..., tet_volumes=..., target_edge_length=...)uses cad-to-dagmc-mesher; mixing these with gmsh-specific arguments (for examplemin_mesh_size) raises an error asking for an explicitmeshing_backend.
Advantages#
Advantage |
Explanation |
|---|---|
Volume meshes without GMSH |
Writes the vtk file directly |
One meshing call for both outputs |
h5m and vtk come from the same mesh |
Simple configuration |
Two surface tolerances plus one tet edge length |
Installed with cad_to_dagmc |
No extra dependency to install |
Limitations#
Limitation |
Impact |
|---|---|
No per-volume sizing |
|
Single tet size |
One |
No mesh algorithm choice |
One built-in method |
See Also#
GMSH Backend - Full-featured meshing backend
CadQuery Backend - Surface-only tessellation backend
Unstructured VTK - Volume mesh output details
Conformal Meshes - Matching surface and volume meshes