cad-to-dagmc 0.7.5__tar.gz → 0.7.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of cad-to-dagmc might be problematic. Click here for more details.

Files changed (53) hide show
  1. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.github/workflows/ci_with_conda_install.yml +30 -21
  2. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/PKG-INFO +21 -17
  3. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/README.md +17 -13
  4. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/pyproject.toml +2 -2
  5. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/_version.py +2 -2
  6. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc/core.py +39 -7
  7. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc.egg-info/PKG-INFO +21 -17
  8. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc.egg-info/requires.txt +2 -2
  9. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_python_api.py +82 -1
  10. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.github/workflows/black.yml +0 -0
  11. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.github/workflows/ci_with_benchmarks.yml +0 -0
  12. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.github/workflows/ci_with_pip_install.yml +0 -0
  13. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.github/workflows/python-publish.yml +0 -0
  14. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.gitignore +0 -0
  15. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/CITATION.cff +0 -0
  16. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/LICENSE +0 -0
  17. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/cadquery_assembly.py +0 -0
  18. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/cadquery_assembly_with_scaled_geometry.py +0 -0
  19. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/cadquery_compound.py +0 -0
  20. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/cadquery_object_and_stp_file.py +0 -0
  21. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/cadquery_text.py +0 -0
  22. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/curved_cadquery_object_to_dagmc_surface_mesh.py +0 -0
  23. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/from_gmsh_mesh_file.py +0 -0
  24. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/multiple_cadquery_objects.py +0 -0
  25. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/multiple_stp_files.py +0 -0
  26. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/single_cadquery_object.py +0 -0
  27. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/single_stp_file.py +0 -0
  28. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/single_stp_file_multiple_volumes.py +0 -0
  29. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/unstrucutred_volume_mesh/curved_cadquery_object_to_dagmc_volume_mesh.py +0 -0
  30. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/unstrucutred_volume_mesh/simulate_unstrucutred_volume_mesh_with_openmc.py +0 -0
  31. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/setup.cfg +0 -0
  32. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc/__init__.py +0 -0
  33. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc.egg-info/SOURCES.txt +0 -0
  34. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc.egg-info/dependency_links.txt +0 -0
  35. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc.egg-info/top_level.txt +0 -0
  36. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/ENDFB-7.1-NNDC_H1.h5 +0 -0
  37. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/ball_reactor.brep +0 -0
  38. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/curved_extrude.stp +0 -0
  39. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/extrude_rectangle.stp +0 -0
  40. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/multi_volume_cylinders.stp +0 -0
  41. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/one_cube.brep +0 -0
  42. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/single_cube.stp +0 -0
  43. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/single_volume_thin.stp +0 -0
  44. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/single_volume_thin.vtk +0 -0
  45. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_brep_file.brep +0 -0
  46. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_file_creation.py +0 -0
  47. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_h5m_in_transport.py +0 -0
  48. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_loading_from_file_vs_shape_object.py +0 -0
  49. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_two_joined_cubes.brep +0 -0
  50. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_two_sep_cubes.brep +0 -0
  51. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_version.py +0 -0
  52. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/two_connected_cubes.stp +0 -0
  53. {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/two_disconnected_cubes.stp +0 -0
@@ -21,45 +21,54 @@ on:
21
21
  jobs:
22
22
  testing:
23
23
  runs-on: ubuntu-latest
24
- strategy:
25
- matrix:
26
- python-version: ["3.10", "3.11", "3.12"]
24
+
27
25
  steps:
28
26
  - name: Checkout repository
29
27
  uses: actions/checkout@v4
30
28
 
31
- - name: install non pypi dependencies
32
- shell: bash
29
+ - name: Install system packages
33
30
  run: |
34
- wget -O Miniforge3.sh "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
35
- bash Miniforge3.sh -b -p "${HOME}/conda"
36
- source "${HOME}/conda/etc/profile.d/conda.sh"
37
- source "${HOME}/conda/etc/profile.d/mamba.sh"
38
- sudo apt-get --allow-releaseinfo-change update
39
31
  sudo apt-get update -y
40
32
  sudo apt-get upgrade -y
41
33
  sudo apt-get install -y libgl1 libglx-mesa0 libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libosmesa6 libosmesa6-dev libgles2-mesa-dev libarchive-dev libpangocairo-1.0-0
42
- mamba activate
43
- mamba create -y --name cad_to_dagmc python=${{ matrix.python-version }}
44
- mamba activate cad_to_dagmc
45
- mamba install -y -c conda-forge "openmc=0.15.0=dagmc*nompi*" trimesh networkx cadquery gmsh python-gmsh
46
- python -m ensurepip --upgrade
47
- python -m pip install . --no-deps
34
+
35
+ - name: Set up Conda
36
+ uses: conda-incubator/setup-miniconda@v2
37
+ with:
38
+ activate-environment: ci-env
39
+ miniforge-version: latest
40
+ channels: conda-forge
41
+
42
+ - name: install dependencies
43
+ shell: bash -l {0}
44
+ run: |
45
+ conda install -y -c conda-forge "openmc=0.15.0=dagmc*nompi*" trimesh networkx cadquery gmsh python-gmsh vtk
46
+ python -m pip install .[tests]
47
+
48
+ - name: Test import
49
+ shell: bash -l {0}
50
+ run: |
48
51
  python -c "import cad_to_dagmc"
49
- mamba install -y -c conda-forge pytest vtk
50
- python -m pip install .[tests] --no-deps
52
+
53
+ - name: Run tests
54
+ shell: bash -l {0}
55
+ run: |
51
56
  pytest -v tests
57
+
58
+ - name: Run examples
59
+ shell: bash -l {0}
60
+ run: |
52
61
  python examples/surface_mesh/cadquery_assembly.py
62
+ python examples/surface_mesh/cadquery_assembly_with_scaled_geometry.py
53
63
  python examples/surface_mesh/cadquery_compound.py
54
64
  python examples/surface_mesh/cadquery_object_and_stp_file.py
55
65
  python examples/surface_mesh/cadquery_text.py
56
66
  python examples/surface_mesh/curved_cadquery_object_to_dagmc_surface_mesh.py
67
+ python examples/surface_mesh/from_gmsh_mesh_file.py
57
68
  python examples/surface_mesh/multiple_cadquery_objects.py
58
69
  python examples/surface_mesh/multiple_stp_files.py
59
- python examples/surface_mesh/single_stp_file_multiple_volumes.py
60
70
  python examples/surface_mesh/single_cadquery_object.py
71
+ python examples/surface_mesh/single_stp_file_multiple_volumes.py
61
72
  python examples/surface_mesh/single_stp_file.py
62
- python examples/surface_mesh/from_gmsh_mesh_file.py
63
73
  python examples/unstrucutred_volume_mesh/curved_cadquery_object_to_dagmc_volume_mesh.py
64
74
  python examples/unstrucutred_volume_mesh/simulate_unstrucutred_volume_mesh_with_openmc.py
65
- python examples/surface_mesh/cadquery_assembly_with_scaled_geometry.py
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: cad_to_dagmc
3
- Version: 0.7.5
3
+ Version: 0.7.7
4
4
  Summary: Converts CAD files to a DAGMC h5m file
5
5
  Author-email: Jonathan Shimwell <mail@jshimwell.com>
6
6
  Project-URL: Homepage, https://github.com/fusion-energy/cad_to_dagmc
@@ -14,8 +14,8 @@ Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
15
  Requires-Dist: trimesh
16
16
  Requires-Dist: networkx
17
- Requires-Dist: cadquery>=2.4.0
18
- Requires-Dist: numpy<=1.26.4
17
+ Requires-Dist: cadquery>=2.5.2
18
+ Requires-Dist: numpy
19
19
  Requires-Dist: gmsh
20
20
  Provides-Extra: tests
21
21
  Requires-Dist: pytest; extra == "tests"
@@ -35,17 +35,25 @@ Requires-Dist: vtk; extra == "tests"
35
35
  [![PyPI](https://img.shields.io/pypi/v/cad_to_dagmc?color=brightgreen&label=pypi&logo=grebrightgreenen&logoColor=green)](https://pypi.org/project/cad_to_dagmc/)
36
36
 
37
37
 
38
- A minimal package that converts CAD geometry to [DAGMC](https://github.com/svalinn/DAGMC/) h5m files
38
+ A minimal package that converts CAD geometry to [DAGMC](https://github.com/svalinn/DAGMC/) compatible meshes
39
39
 
40
- cad-to-dagmc can create:
40
+ cad-to-dagmc can create DAGMC compatible:
41
41
  - surface meshes / faceted geometry / triangular meshes
42
42
  - unstructured mesh / tetrahedral meshes / volume meshes
43
43
 
44
- cad-to-dagmc can convert:
44
+ cad-to-dagmc can convert the following in to DAGMC compatible meshes:
45
45
  - STEP files
46
- - CadQuery objects (in memory)
46
+ - CadQuery objects
47
+ - Gmsh meshes
47
48
 
48
- cad-to-dagmc aims to produce DAGMC compatible h5m files from CAD geometry is intended to convert [STEP](http://www.steptools.com/stds/step/) files or [CadQuery](https://cadquery.readthedocs.io) objects to a [DAGMC](https://github.com/svalinn/DAGMC/) compatible h5m file.
49
+ Options include
50
+ - Ability to scale the output mesh (e.g from meters to cm)
51
+ - Ability to skip imprinting stage
52
+ - Specify meshing parameters for finer or coarser meshes or change the mesh algorithm
53
+ - Ability to specify a material tag for the DAGMC implicit complement
54
+ - Pass objects from CadQuery in memory (without writting to disk)
55
+
56
+ cad-to-dagmc aims to produce DAGMC compatible h5m and vtk files from CAD geometry is intended to convert [STEP](http://www.steptools.com/stds/step/) files, [CadQuery](https://cadquery.readthedocs.io) or [Gmsh]([https://cadquery.readthedocs.io](https://gmsh.info/)) meshes objects to a [DAGMC](https://github.com/svalinn/DAGMC/) compatible h5m file or a DAGMC compatible Unstruuctre vtk file.
49
57
 
50
58
  The resulting DAGMC geometry can then be used for simulations in [OpenMC](https://github.com/openmc-dev/openmc/) or [other supported codes](https://svalinn.github.io/DAGMC/).
51
59
 
@@ -146,7 +154,7 @@ You may also want to install OpenMC with DAGMC to make use of the h5m geometry f
146
154
 
147
155
  To install OpenMC you can run ```mamba install -c conda-forge openmc``` however this more specific command makes sure the latest version of OpenMC which contains DAGMC is chosen by conda / mamba
148
156
  ```bash
149
- mamba install -c conda-forge -y "openmc=0.14.0=dagmc*nompi*"
157
+ mamba install -c conda-forge -y "openmc=0.15.0=dagmc*nompi*"
150
158
  ```
151
159
 
152
160
  It might not be possible to install OpenMC and cad-to-dagmc in the same conda/mamba python environment so you may have to create a new conda/mamba environment and install OpenMC there.
@@ -160,15 +168,11 @@ The package requires newer versions of Linux. For example the package does not w
160
168
 
161
169
  The package requires newer versions of pip. It is recommended to ensure that your version of pip is up to date. This can be done with ```python -m pip install --upgrade pip```
162
170
 
163
- Installing one of the package dependancies (gmsh) with pip appears to result in errors when passing cad objects in memory between cadquery / ocp and gmsh. The default method of passing cad objects is via file so this should not impact most users. The conda install gmsh appears to work fine with in memory passing of cad objects as the version of OCP matches between Gmsh and CadQuery.
164
-
165
-
166
- # Usage - creation of DAGMC h5m files
171
+ Installing one of the package dependancies (Gmsh) with pip appears to result in errors when passing cad objects in memory between cadquery / ocp and gmsh. The default method of passing cad objects is via file so this should not impact most users. The conda install gmsh appears to work fine with in memory passing of cad objects as the version of OCP matches between Gmsh and CadQuery.
167
172
 
168
- For examples see the [examples folder](https://github.com/fusion-energy/cad_to_dagmc/tree/main/examples)
169
173
 
170
- # Usage - simulation with transport code
174
+ # Usage
171
175
 
172
- For examples see the [examples folder](https://github.com/fusion-energy/cad_to_dagmc/tree/main/examples)
176
+ For examples showing creation of DAGMC h5m files, vtk files and usage within OpenMC transport code see the [examples folder](https://github.com/fusion-energy/cad_to_dagmc/tree/main/examples)
173
177
 
174
178
  For more examples see the CAD tasks in the [neutronics-workshop](https://github.com/fusion-energy/neutronics-workshop) and [model benchmark zoo](https://github.com/fusion-energy/model_benchmark_zoo)
@@ -12,17 +12,25 @@
12
12
  [![PyPI](https://img.shields.io/pypi/v/cad_to_dagmc?color=brightgreen&label=pypi&logo=grebrightgreenen&logoColor=green)](https://pypi.org/project/cad_to_dagmc/)
13
13
 
14
14
 
15
- A minimal package that converts CAD geometry to [DAGMC](https://github.com/svalinn/DAGMC/) h5m files
15
+ A minimal package that converts CAD geometry to [DAGMC](https://github.com/svalinn/DAGMC/) compatible meshes
16
16
 
17
- cad-to-dagmc can create:
17
+ cad-to-dagmc can create DAGMC compatible:
18
18
  - surface meshes / faceted geometry / triangular meshes
19
19
  - unstructured mesh / tetrahedral meshes / volume meshes
20
20
 
21
- cad-to-dagmc can convert:
21
+ cad-to-dagmc can convert the following in to DAGMC compatible meshes:
22
22
  - STEP files
23
- - CadQuery objects (in memory)
23
+ - CadQuery objects
24
+ - Gmsh meshes
24
25
 
25
- cad-to-dagmc aims to produce DAGMC compatible h5m files from CAD geometry is intended to convert [STEP](http://www.steptools.com/stds/step/) files or [CadQuery](https://cadquery.readthedocs.io) objects to a [DAGMC](https://github.com/svalinn/DAGMC/) compatible h5m file.
26
+ Options include
27
+ - Ability to scale the output mesh (e.g from meters to cm)
28
+ - Ability to skip imprinting stage
29
+ - Specify meshing parameters for finer or coarser meshes or change the mesh algorithm
30
+ - Ability to specify a material tag for the DAGMC implicit complement
31
+ - Pass objects from CadQuery in memory (without writting to disk)
32
+
33
+ cad-to-dagmc aims to produce DAGMC compatible h5m and vtk files from CAD geometry is intended to convert [STEP](http://www.steptools.com/stds/step/) files, [CadQuery](https://cadquery.readthedocs.io) or [Gmsh]([https://cadquery.readthedocs.io](https://gmsh.info/)) meshes objects to a [DAGMC](https://github.com/svalinn/DAGMC/) compatible h5m file or a DAGMC compatible Unstruuctre vtk file.
26
34
 
27
35
  The resulting DAGMC geometry can then be used for simulations in [OpenMC](https://github.com/openmc-dev/openmc/) or [other supported codes](https://svalinn.github.io/DAGMC/).
28
36
 
@@ -123,7 +131,7 @@ You may also want to install OpenMC with DAGMC to make use of the h5m geometry f
123
131
 
124
132
  To install OpenMC you can run ```mamba install -c conda-forge openmc``` however this more specific command makes sure the latest version of OpenMC which contains DAGMC is chosen by conda / mamba
125
133
  ```bash
126
- mamba install -c conda-forge -y "openmc=0.14.0=dagmc*nompi*"
134
+ mamba install -c conda-forge -y "openmc=0.15.0=dagmc*nompi*"
127
135
  ```
128
136
 
129
137
  It might not be possible to install OpenMC and cad-to-dagmc in the same conda/mamba python environment so you may have to create a new conda/mamba environment and install OpenMC there.
@@ -137,15 +145,11 @@ The package requires newer versions of Linux. For example the package does not w
137
145
 
138
146
  The package requires newer versions of pip. It is recommended to ensure that your version of pip is up to date. This can be done with ```python -m pip install --upgrade pip```
139
147
 
140
- Installing one of the package dependancies (gmsh) with pip appears to result in errors when passing cad objects in memory between cadquery / ocp and gmsh. The default method of passing cad objects is via file so this should not impact most users. The conda install gmsh appears to work fine with in memory passing of cad objects as the version of OCP matches between Gmsh and CadQuery.
141
-
142
-
143
- # Usage - creation of DAGMC h5m files
148
+ Installing one of the package dependancies (Gmsh) with pip appears to result in errors when passing cad objects in memory between cadquery / ocp and gmsh. The default method of passing cad objects is via file so this should not impact most users. The conda install gmsh appears to work fine with in memory passing of cad objects as the version of OCP matches between Gmsh and CadQuery.
144
149
 
145
- For examples see the [examples folder](https://github.com/fusion-energy/cad_to_dagmc/tree/main/examples)
146
150
 
147
- # Usage - simulation with transport code
151
+ # Usage
148
152
 
149
- For examples see the [examples folder](https://github.com/fusion-energy/cad_to_dagmc/tree/main/examples)
153
+ For examples showing creation of DAGMC h5m files, vtk files and usage within OpenMC transport code see the [examples folder](https://github.com/fusion-energy/cad_to_dagmc/tree/main/examples)
150
154
 
151
155
  For more examples see the CAD tasks in the [neutronics-workshop](https://github.com/fusion-energy/neutronics-workshop) and [model benchmark zoo](https://github.com/fusion-energy/model_benchmark_zoo)
@@ -20,8 +20,8 @@ classifiers = [
20
20
  dependencies = [
21
21
  "trimesh",
22
22
  "networkx",
23
- "cadquery>=2.4.0",
24
- "numpy<=1.26.4",
23
+ "cadquery>=2.5.2",
24
+ "numpy",
25
25
  "gmsh"
26
26
  ]
27
27
  dynamic = ["version"]
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.7.5'
16
- __version_tuple__ = version_tuple = (0, 7, 5)
15
+ __version__ = version = '0.7.7'
16
+ __version_tuple__ = version_tuple = (0, 7, 7)
@@ -5,6 +5,7 @@ import numpy as np
5
5
  from cadquery import importers
6
6
  from pymoab import core, types
7
7
  import tempfile
8
+ import warnings
8
9
 
9
10
 
10
11
  def _define_moab_core_and_tags() -> tuple[core.Core, dict]:
@@ -76,6 +77,7 @@ def _vertices_to_h5m(
76
77
  triangles:
77
78
  material_tags:
78
79
  h5m_filename:
80
+ implicit_complement_material_tag:
79
81
  """
80
82
 
81
83
  if len(material_tags) != len(triangles_by_solid_by_face):
@@ -184,7 +186,15 @@ def _vertices_to_h5m(
184
186
 
185
187
  moab_core.add_entities(file_set, all_sets)
186
188
 
187
- moab_core.write_file(h5m_filename)
189
+ # makes the folder if it does not exist
190
+ if Path(h5m_filename).parent:
191
+ Path(h5m_filename).parent.mkdir(parents=True, exist_ok=True)
192
+
193
+ # moab_core.write_file only accepts strings
194
+ if isinstance(h5m_filename, Path):
195
+ moab_core.write_file(str(h5m_filename))
196
+ else:
197
+ moab_core.write_file(h5m_filename)
188
198
 
189
199
  print(f"written DAGMC file {h5m_filename}")
190
200
 
@@ -230,8 +240,7 @@ def _mesh_brep(
230
240
  mesh_algorithm: int = 1,
231
241
  dimensions: int = 2,
232
242
  ):
233
- """Creates a conformal surface meshes of the volumes in a Brep file using
234
- Gmsh.
243
+ """Creates a conformal surface meshes of the volumes in a Brep file using Gmsh.
235
244
 
236
245
  Args:
237
246
  occ_shape: the occ_shape of the Brep file to convert
@@ -339,6 +348,12 @@ def _check_material_tags(material_tags, iterable_solids):
339
348
  if not isinstance(material_tag, str):
340
349
  msg = f"material_tags should be an iterable of strings."
341
350
  raise ValueError(msg)
351
+ if len(material_tag) > 28:
352
+ msg = (
353
+ f"Material tag {material_tag} is too long. DAGMC will truncate this material tag "
354
+ f"to 28 characters. The resulting tag in the h5m file will be {material_tag[:28]}"
355
+ )
356
+ warnings.warn(msg)
342
357
 
343
358
 
344
359
  def order_material_ids_by_brep_order(original_ids, scrambled_id, material_tags):
@@ -357,6 +372,7 @@ class MeshToDagmc:
357
372
 
358
373
  # TODO add export_unstructured_mesh_file
359
374
  # TODO add add_gmsh_msh_file
375
+ # TODO test for exports result in files
360
376
 
361
377
  def export_dagmc_h5m_file(
362
378
  self,
@@ -530,6 +546,8 @@ class CadToDagmc:
530
546
  The gmsh object after finalizing the mesh.
531
547
  """
532
548
 
549
+ # gmesh writes out a vtk file that is accepted by openmc.UnstructuredMesh
550
+ # The library argument must be set to "moab"
533
551
  if Path(filename).suffix != ".vtk":
534
552
  raise ValueError("Unstructured mesh filename must have a .vtk extension")
535
553
 
@@ -554,9 +572,15 @@ class CadToDagmc:
554
572
  dimensions=3,
555
573
  )
556
574
 
557
- # gmesh writes out a vtk file that is accepted by openmc.UnstructuredMesh
558
- # The library argument must be set to "moab"
559
- gmsh.write(filename)
575
+ # makes the folder if it does not exist
576
+ if Path(filename).parent:
577
+ Path(filename).parent.mkdir(parents=True, exist_ok=True)
578
+
579
+ # gmsh.write only accepts strings
580
+ if isinstance(filename, Path):
581
+ gmsh.write(str(filename))
582
+ else:
583
+ gmsh.write(filename)
560
584
 
561
585
  gmsh.finalize()
562
586
 
@@ -621,7 +645,15 @@ class CadToDagmc:
621
645
  dimensions=dimensions,
622
646
  )
623
647
 
624
- gmsh.write(filename)
648
+ # makes the folder if it does not exist
649
+ if Path(filename).parent:
650
+ Path(filename).parent.mkdir(parents=True, exist_ok=True)
651
+
652
+ # gmsh.write only accepts strings
653
+ if isinstance(filename, Path):
654
+ gmsh.write(str(filename))
655
+ else:
656
+ gmsh.write(filename)
625
657
 
626
658
  print(f"written GMSH mesh file {filename}")
627
659
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: cad_to_dagmc
3
- Version: 0.7.5
3
+ Version: 0.7.7
4
4
  Summary: Converts CAD files to a DAGMC h5m file
5
5
  Author-email: Jonathan Shimwell <mail@jshimwell.com>
6
6
  Project-URL: Homepage, https://github.com/fusion-energy/cad_to_dagmc
@@ -14,8 +14,8 @@ Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
15
  Requires-Dist: trimesh
16
16
  Requires-Dist: networkx
17
- Requires-Dist: cadquery>=2.4.0
18
- Requires-Dist: numpy<=1.26.4
17
+ Requires-Dist: cadquery>=2.5.2
18
+ Requires-Dist: numpy
19
19
  Requires-Dist: gmsh
20
20
  Provides-Extra: tests
21
21
  Requires-Dist: pytest; extra == "tests"
@@ -35,17 +35,25 @@ Requires-Dist: vtk; extra == "tests"
35
35
  [![PyPI](https://img.shields.io/pypi/v/cad_to_dagmc?color=brightgreen&label=pypi&logo=grebrightgreenen&logoColor=green)](https://pypi.org/project/cad_to_dagmc/)
36
36
 
37
37
 
38
- A minimal package that converts CAD geometry to [DAGMC](https://github.com/svalinn/DAGMC/) h5m files
38
+ A minimal package that converts CAD geometry to [DAGMC](https://github.com/svalinn/DAGMC/) compatible meshes
39
39
 
40
- cad-to-dagmc can create:
40
+ cad-to-dagmc can create DAGMC compatible:
41
41
  - surface meshes / faceted geometry / triangular meshes
42
42
  - unstructured mesh / tetrahedral meshes / volume meshes
43
43
 
44
- cad-to-dagmc can convert:
44
+ cad-to-dagmc can convert the following in to DAGMC compatible meshes:
45
45
  - STEP files
46
- - CadQuery objects (in memory)
46
+ - CadQuery objects
47
+ - Gmsh meshes
47
48
 
48
- cad-to-dagmc aims to produce DAGMC compatible h5m files from CAD geometry is intended to convert [STEP](http://www.steptools.com/stds/step/) files or [CadQuery](https://cadquery.readthedocs.io) objects to a [DAGMC](https://github.com/svalinn/DAGMC/) compatible h5m file.
49
+ Options include
50
+ - Ability to scale the output mesh (e.g from meters to cm)
51
+ - Ability to skip imprinting stage
52
+ - Specify meshing parameters for finer or coarser meshes or change the mesh algorithm
53
+ - Ability to specify a material tag for the DAGMC implicit complement
54
+ - Pass objects from CadQuery in memory (without writting to disk)
55
+
56
+ cad-to-dagmc aims to produce DAGMC compatible h5m and vtk files from CAD geometry is intended to convert [STEP](http://www.steptools.com/stds/step/) files, [CadQuery](https://cadquery.readthedocs.io) or [Gmsh]([https://cadquery.readthedocs.io](https://gmsh.info/)) meshes objects to a [DAGMC](https://github.com/svalinn/DAGMC/) compatible h5m file or a DAGMC compatible Unstruuctre vtk file.
49
57
 
50
58
  The resulting DAGMC geometry can then be used for simulations in [OpenMC](https://github.com/openmc-dev/openmc/) or [other supported codes](https://svalinn.github.io/DAGMC/).
51
59
 
@@ -146,7 +154,7 @@ You may also want to install OpenMC with DAGMC to make use of the h5m geometry f
146
154
 
147
155
  To install OpenMC you can run ```mamba install -c conda-forge openmc``` however this more specific command makes sure the latest version of OpenMC which contains DAGMC is chosen by conda / mamba
148
156
  ```bash
149
- mamba install -c conda-forge -y "openmc=0.14.0=dagmc*nompi*"
157
+ mamba install -c conda-forge -y "openmc=0.15.0=dagmc*nompi*"
150
158
  ```
151
159
 
152
160
  It might not be possible to install OpenMC and cad-to-dagmc in the same conda/mamba python environment so you may have to create a new conda/mamba environment and install OpenMC there.
@@ -160,15 +168,11 @@ The package requires newer versions of Linux. For example the package does not w
160
168
 
161
169
  The package requires newer versions of pip. It is recommended to ensure that your version of pip is up to date. This can be done with ```python -m pip install --upgrade pip```
162
170
 
163
- Installing one of the package dependancies (gmsh) with pip appears to result in errors when passing cad objects in memory between cadquery / ocp and gmsh. The default method of passing cad objects is via file so this should not impact most users. The conda install gmsh appears to work fine with in memory passing of cad objects as the version of OCP matches between Gmsh and CadQuery.
164
-
165
-
166
- # Usage - creation of DAGMC h5m files
171
+ Installing one of the package dependancies (Gmsh) with pip appears to result in errors when passing cad objects in memory between cadquery / ocp and gmsh. The default method of passing cad objects is via file so this should not impact most users. The conda install gmsh appears to work fine with in memory passing of cad objects as the version of OCP matches between Gmsh and CadQuery.
167
172
 
168
- For examples see the [examples folder](https://github.com/fusion-energy/cad_to_dagmc/tree/main/examples)
169
173
 
170
- # Usage - simulation with transport code
174
+ # Usage
171
175
 
172
- For examples see the [examples folder](https://github.com/fusion-energy/cad_to_dagmc/tree/main/examples)
176
+ For examples showing creation of DAGMC h5m files, vtk files and usage within OpenMC transport code see the [examples folder](https://github.com/fusion-energy/cad_to_dagmc/tree/main/examples)
173
177
 
174
178
  For more examples see the CAD tasks in the [neutronics-workshop](https://github.com/fusion-energy/neutronics-workshop) and [model benchmark zoo](https://github.com/fusion-energy/model_benchmark_zoo)
@@ -1,7 +1,7 @@
1
1
  trimesh
2
2
  networkx
3
- cadquery>=2.4.0
4
- numpy<=1.26.4
3
+ cadquery>=2.5.2
4
+ numpy
5
5
  gmsh
6
6
 
7
7
  [tests]
@@ -1,8 +1,10 @@
1
1
  import os
2
2
  from pathlib import Path
3
+ import pytest
3
4
  import cadquery as cq
4
5
  from cad_to_dagmc import CadToDagmc
5
-
6
+ import warnings
7
+ from cad_to_dagmc.core import _check_material_tags
6
8
 
7
9
  from pathlib import Path
8
10
 
@@ -138,3 +140,82 @@ def test_add_stp_file_returned_volumes():
138
140
  c2d = CadToDagmc()
139
141
  vols = c2d.add_stp_file("tests/two_disconnected_cubes.stp")
140
142
  assert vols == 2
143
+
144
+
145
+ @pytest.mark.parametrize(
146
+ "filename",
147
+ [
148
+ "test_dagmc1.h5m",
149
+ "out_folder1/test_dagmc2.h5m",
150
+ Path("test_dagmc3.h5m"),
151
+ Path("out_folder2/test_dagmc4.h5m"),
152
+ ],
153
+ )
154
+ def test_export_dagmc_h5m_file_handel_paths_folders_strings(filename):
155
+ """Checks that a h5m file is created"""
156
+
157
+ box = cq.Workplane().box(1, 1, 1)
158
+ c2d = CadToDagmc()
159
+ c2d.add_cadquery_object(box, material_tags=["mat1"])
160
+
161
+ c2d.export_dagmc_h5m_file(filename=filename)
162
+
163
+ assert Path(filename).is_file()
164
+
165
+ os.system(f"rm -rf {filename}")
166
+
167
+
168
+ @pytest.mark.parametrize(
169
+ "filename",
170
+ [
171
+ "test_dagmc1.vtk",
172
+ "out_folder3/test_dagmc2.vtk",
173
+ Path("test_dagmc3.vtk"),
174
+ Path("out_folder4/test_dagmc4.vtk"),
175
+ ],
176
+ )
177
+ def test_export_unstructured_mesh_file_handel_paths_folders_strings(filename):
178
+ """Checks that a vtk file is created"""
179
+
180
+ box = cq.Workplane().box(1, 1, 1)
181
+ c2d = CadToDagmc()
182
+ c2d.add_cadquery_object(box, material_tags=["mat1"])
183
+
184
+ c2d.export_unstructured_mesh_file(filename=filename)
185
+
186
+ assert Path(filename).is_file()
187
+
188
+ os.system(f"rm -rf {filename}")
189
+
190
+
191
+ @pytest.mark.parametrize(
192
+ "filename",
193
+ [
194
+ "test_dagmc1.msh",
195
+ "out_folder5/test_dagmc2.msh",
196
+ Path("test_dagmc3.msh"),
197
+ Path("out_folder6/test_dagmc4.msh"),
198
+ ],
199
+ )
200
+ def test_export_gmsh_mesh_file_handel_paths_folders_strings(filename):
201
+ """Checks that a vtk file is created"""
202
+
203
+ box = cq.Workplane().box(1, 1, 1)
204
+ c2d = CadToDagmc()
205
+ c2d.add_cadquery_object(box, material_tags=["mat1"])
206
+
207
+ c2d.export_gmsh_mesh_file(filename=filename)
208
+
209
+ assert Path(filename).is_file()
210
+
211
+ os.system(f"rm -rf {filename}")
212
+
213
+
214
+ def test_check_material_tags_too_long():
215
+ with warnings.catch_warnings(record=True) as w:
216
+ warnings.simplefilter("always")
217
+ _check_material_tags(["a" * 29], [1])
218
+ assert len(w) == 1
219
+ assert issubclass(w[-1].category, UserWarning)
220
+ assert "Material tag" in str(w[-1].message)
221
+ assert "a" * 29 in str(w[-1].message)
File without changes
File without changes
File without changes
File without changes