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.
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.github/workflows/ci_with_conda_install.yml +30 -21
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/PKG-INFO +21 -17
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/README.md +17 -13
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/pyproject.toml +2 -2
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/_version.py +2 -2
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc/core.py +39 -7
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc.egg-info/PKG-INFO +21 -17
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc.egg-info/requires.txt +2 -2
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_python_api.py +82 -1
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.github/workflows/black.yml +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.github/workflows/ci_with_benchmarks.yml +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.github/workflows/ci_with_pip_install.yml +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.github/workflows/python-publish.yml +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/.gitignore +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/CITATION.cff +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/LICENSE +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/cadquery_assembly.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/cadquery_assembly_with_scaled_geometry.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/cadquery_compound.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/cadquery_object_and_stp_file.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/cadquery_text.py +0 -0
- {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
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/from_gmsh_mesh_file.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/multiple_cadquery_objects.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/multiple_stp_files.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/single_cadquery_object.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/single_stp_file.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/single_stp_file_multiple_volumes.py +0 -0
- {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
- {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
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/setup.cfg +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc/__init__.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc.egg-info/SOURCES.txt +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc.egg-info/dependency_links.txt +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/src/cad_to_dagmc.egg-info/top_level.txt +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/ENDFB-7.1-NNDC_H1.h5 +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/ball_reactor.brep +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/curved_extrude.stp +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/extrude_rectangle.stp +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/multi_volume_cylinders.stp +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/one_cube.brep +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/single_cube.stp +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/single_volume_thin.stp +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/single_volume_thin.vtk +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_brep_file.brep +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_file_creation.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_h5m_in_transport.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_loading_from_file_vs_shape_object.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_two_joined_cubes.brep +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_two_sep_cubes.brep +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/test_version.py +0 -0
- {cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/tests/two_connected_cubes.stp +0 -0
- {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
|
-
|
|
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:
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
50
|
-
|
|
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
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: cad_to_dagmc
|
|
3
|
-
Version: 0.7.
|
|
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.
|
|
18
|
-
Requires-Dist: numpy
|
|
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
|
[](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/)
|
|
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
|
|
46
|
+
- CadQuery objects
|
|
47
|
+
- Gmsh meshes
|
|
47
48
|
|
|
48
|
-
|
|
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.
|
|
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 (
|
|
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
|
|
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
|
[](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/)
|
|
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
|
|
23
|
+
- CadQuery objects
|
|
24
|
+
- Gmsh meshes
|
|
24
25
|
|
|
25
|
-
|
|
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.
|
|
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 (
|
|
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
|
|
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)
|
|
@@ -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
|
-
|
|
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
|
-
#
|
|
558
|
-
|
|
559
|
-
|
|
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
|
-
|
|
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
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: cad_to_dagmc
|
|
3
|
-
Version: 0.7.
|
|
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.
|
|
18
|
-
Requires-Dist: numpy
|
|
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
|
[](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/)
|
|
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
|
|
46
|
+
- CadQuery objects
|
|
47
|
+
- Gmsh meshes
|
|
47
48
|
|
|
48
|
-
|
|
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.
|
|
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 (
|
|
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
|
|
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,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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/cadquery_object_and_stp_file.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/multiple_cadquery_objects.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cad_to_dagmc-0.7.5 → cad_to_dagmc-0.7.7}/examples/surface_mesh/single_stp_file_multiple_volumes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|