RingsPy 1.0.1__tar.gz → 1.2.0__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.
- ringspy-1.2.0/PKG-INFO +341 -0
- {ringspy-1.0.1 → ringspy-1.2.0}/README.md +118 -74
- ringspy-1.2.0/pyproject.toml +56 -0
- {ringspy-1.0.1 → ringspy-1.2.0}/ringspy/MeshGenTools.py +898 -1566
- ringspy-1.2.0/ringspy/__init__.py +13 -0
- ringspy-1.2.0/ringspy/__main__.py +5 -0
- ringspy-1.2.0/ringspy/cli.py +46 -0
- ringspy-1.2.0/ringspy/config.py +230 -0
- ringspy-1.2.0/ringspy/pipeline.py +276 -0
- ringspy-1.2.0/ringspy.egg-info/PKG-INFO +341 -0
- ringspy-1.2.0/ringspy.egg-info/SOURCES.txt +21 -0
- ringspy-1.2.0/ringspy.egg-info/entry_points.txt +2 -0
- ringspy-1.2.0/ringspy.egg-info/requires.txt +22 -0
- ringspy-1.2.0/setup.cfg +4 -0
- ringspy-1.2.0/tests/test_config.py +225 -0
- ringspy-1.2.0/tests/test_examples.py +130 -0
- ringspy-1.2.0/tests/test_legacy_template.py +37 -0
- ringspy-1.2.0/tests/test_regressions.py +232 -0
- ringspy-1.2.0/tests/test_speedups.py +145 -0
- ringspy-1.0.1/PKG-INFO +0 -291
- ringspy-1.0.1/pyproject.toml +0 -9
- ringspy-1.0.1/ringspy/__init__.py +0 -8
- ringspy-1.0.1/ringspy.egg-info/PKG-INFO +0 -291
- ringspy-1.0.1/ringspy.egg-info/SOURCES.txt +0 -14
- ringspy-1.0.1/ringspy.egg-info/not-zip-safe +0 -1
- ringspy-1.0.1/ringspy.egg-info/requires.txt +0 -12
- ringspy-1.0.1/setup.cfg +0 -65
- ringspy-1.0.1/setup.py +0 -11
- {ringspy-1.0.1 → ringspy-1.2.0}/LICENSE +0 -0
- {ringspy-1.0.1 → ringspy-1.2.0}/ringspy/py.typed +0 -0
- {ringspy-1.0.1 → ringspy-1.2.0}/ringspy.egg-info/dependency_links.txt +0 -0
- {ringspy-1.0.1 → ringspy-1.2.0}/ringspy.egg-info/top_level.txt +0 -0
ringspy-1.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ringspy
|
|
3
|
+
Version: 1.2.0
|
|
4
|
+
Summary: A geometric generation tool for prismatic cellular solids
|
|
5
|
+
Author-email: Hao Yin <haoyin2022@u.northwestern.edu>
|
|
6
|
+
License-Expression: GPL-3.0-only
|
|
7
|
+
Project-URL: Homepage, https://github.com/kingyin3613/ringspy
|
|
8
|
+
Project-URL: Paper, https://doi.org/10.21105/joss.04945
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Science/Research
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Topic :: Scientific/Engineering
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
17
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
18
|
+
Requires-Python: >=3.10
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
Requires-Dist: numpy
|
|
22
|
+
Requires-Dist: scipy
|
|
23
|
+
Requires-Dist: matplotlib>=3.2.2
|
|
24
|
+
Requires-Dist: tomli>=1.1; python_version < "3.11"
|
|
25
|
+
Provides-Extra: vtk
|
|
26
|
+
Requires-Dist: vtk; extra == "vtk"
|
|
27
|
+
Provides-Extra: hex
|
|
28
|
+
Requires-Dist: hexalattice>=1.2.1; extra == "hex"
|
|
29
|
+
Provides-Extra: all
|
|
30
|
+
Requires-Dist: vtk; extra == "all"
|
|
31
|
+
Requires-Dist: hexalattice>=1.2.1; extra == "all"
|
|
32
|
+
Provides-Extra: test
|
|
33
|
+
Requires-Dist: pytest>=7; extra == "test"
|
|
34
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
35
|
+
Requires-Dist: vtk; extra == "test"
|
|
36
|
+
Requires-Dist: hexalattice>=1.2.1; extra == "test"
|
|
37
|
+
Dynamic: license-file
|
|
38
|
+
|
|
39
|
+
# RingsPy
|
|
40
|
+
[](https://www.python.org/)
|
|
41
|
+
[](https://badge.fury.io/py/ringspy)
|
|
42
|
+
[](https://anaconda.org/conda-forge/ringspy)
|
|
43
|
+
[](https://www.gnu.org/licenses/gpl-3.0.html)
|
|
44
|
+
[](https://github.com/kingyin3613/ringspy/actions/workflows/tests.yml)
|
|
45
|
+
[](https://codecov.io/gh/kingyin3613/ringspy)
|
|
46
|
+
[](https://doi.org/10.21105/joss.04945)
|
|
47
|
+
|
|
48
|
+

|
|
49
|
+
|
|
50
|
+
RingsPy is a Voronoi diagrams-based geometric generation tool that generates 3D meshes and models of prismatic cellular solids with radial growth rules.
|
|
51
|
+
|
|
52
|
+
## Dependencies and Installation
|
|
53
|
+
RingsPy needs Python 3.10 or newer and depends on mainstream Python libraries ``numpy``, ``scipy`` and ``matplotlib``. It optionally depends on library ``hexalattice``, if a regular hexagonal lattice (e.g. honeycomb) is wanted, and on ``vtk``, if the 3D model (STL) files are also wanted.
|
|
54
|
+
### 1. pip install
|
|
55
|
+
To install RingsPy with all optional features, one may use `pip`:
|
|
56
|
+
```bash
|
|
57
|
+
pip install "ringspy[all]"
|
|
58
|
+
```
|
|
59
|
+
`pip install ringspy` installs the core package only; add the extras `[vtk]` (STL export) or `[hex]` (`regular_hexagonal` growth rule) as needed. One may also use:
|
|
60
|
+
```bash
|
|
61
|
+
pip install "ringspy[all] @ git+https://github.com/kingyin3613/ringspy.git"
|
|
62
|
+
```
|
|
63
|
+
to get updates beyond the latest release.
|
|
64
|
+
|
|
65
|
+
### 2. conda install
|
|
66
|
+
To install RingsPy in `conda` environments, one can also use `conda-forge` channel:
|
|
67
|
+
```bash
|
|
68
|
+
conda install -c conda-forge ringspy
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 3. Installation Check
|
|
72
|
+
|
|
73
|
+
There are some unit tests in [tests](https://github.com/kingyin3613/ringspy/tree/main/tests/). One can use ``pytest`` to check whether the installation is successful by installing the test dependencies in the cloned ``ringspy`` directory and then running ``pytest`` there (generated files go to temporary folders):
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
pip install -e ".[test]"
|
|
77
|
+
pytest
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`pytest -m "not slow"` skips the end-to-end runs of the examples and takes well under a minute.
|
|
81
|
+
|
|
82
|
+
## Getting Started (Current version: v1.2.0)
|
|
83
|
+
Once all required components are installed and one is ready to begin, a path forward should be established for generating the mesh. The basic steps for running/viewing a cellular mesh are listed as the following:
|
|
84
|
+
|
|
85
|
+
1. Edit geometry and algorithm parameters in an input file
|
|
86
|
+
2. Generate mesh with the command `ringspy run` (or with `ringspy.generate` in Python)
|
|
87
|
+
3. Visualize 2D view using Matplotlib or 3D model in `ParaView`
|
|
88
|
+
4. (Optional) Export 3D STL model for 3D editing and/or printing
|
|
89
|
+
5. (Optional) Export input file for numerical simulations with software `Abaqus`
|
|
90
|
+
|
|
91
|
+
### 1. Geometry and Parameters
|
|
92
|
+
The first step to generate a cellular geometry is selecting geometry and appropriate parameters.
|
|
93
|
+
|
|
94
|
+
### 1.1. Geometry
|
|
95
|
+
An input file in [TOML](https://toml.io) format, for example [`wood_cube.toml`](https://github.com/kingyin3613/ringspy/tree/main/examples/wood_cube.toml) in the [examples](https://github.com/kingyin3613/ringspy/tree/main/examples/) directory, holds the parameters for the generation of a cubic wood specimen. The other examples there are a wood specimen with more regular cells (`wood_cube_lloyd.toml`), honeycombs clipped by a hexagon or a triangle (`honeycomb_hex.toml`, `honeycomb_tri.toml`), and a mesh of previously saved cells (`saved_sites.toml`). Copy the one closest to the wanted geometry and edit it.
|
|
96
|
+
|
|
97
|
+
*Note: The Mesh Generation Tool by now only accepts many of pre-defined boundary geometries (for v1.x, the following 3 shapes are supported: triangle, square, hexagon), importing of CAD and/or other 3D model files will be implemented in subsequent versions.*
|
|
98
|
+
|
|
99
|
+
*Note: for greatest compatibility create the geometry using all millimeters.*
|
|
100
|
+
|
|
101
|
+
### 1.2. Parameters
|
|
102
|
+
|
|
103
|
+
By opening an input file, e.g., `examples/wood_cube.toml` in any text editor, a file format similar to what is shown below will be displayed:
|
|
104
|
+
```toml
|
|
105
|
+
geoName = "wood_cube"
|
|
106
|
+
path = "meshes" # output folder: the files go to meshes/wood_cube/
|
|
107
|
+
|
|
108
|
+
# Cell placement
|
|
109
|
+
radial_growth_rule = "binary" # binary, binary_lloyd, regular_hexagonal, or a saved *_sites.npy file
|
|
110
|
+
iter_max = 500 # increase this number to achieve a more regular geometry
|
|
111
|
+
print_interval = 500 # interval for printing progress info
|
|
112
|
+
seed = 2023 # random seed; remove it for a different geometry on every run
|
|
113
|
+
|
|
114
|
+
# Radial cell growth
|
|
115
|
+
r_min = 0 # inner radius of generation domain
|
|
116
|
+
r_max = 4 # outer radius of generation domain
|
|
117
|
+
nrings = 4 # number of rings
|
|
118
|
+
width_heart = 0.3 # ring width of the innermost ring (left out: 0.3*(r_max-r_min)/nrings)
|
|
119
|
+
width_sparse = 0.7 # ring width of rings with sparse cells (left out: 0.7*(r_max-r_min)/nrings)
|
|
120
|
+
width_dense = 0.3 # ring width of rings with dense cells (left out: 0.3*(r_max-r_min)/nrings)
|
|
121
|
+
generation_center = [0, 0] # coordinates of generation domain center
|
|
122
|
+
|
|
123
|
+
cellsize_sparse = 0.02
|
|
124
|
+
cellsize_dense = 0.01
|
|
125
|
+
cellwallthickness_sparse = 0.006
|
|
126
|
+
cellwallthickness_dense = 0.010
|
|
127
|
+
|
|
128
|
+
# Clipping box
|
|
129
|
+
boundaryFlag = true
|
|
130
|
+
box_shape = "square" # square, triangle or hexagon
|
|
131
|
+
box_center = [0, 0] # coordinates of clipping box center
|
|
132
|
+
box_size = 4.0 # side length
|
|
133
|
+
|
|
134
|
+
# Longitudinal direction
|
|
135
|
+
nsegments = 2 # increase this number to achieve a smoother transition in longitudinal direction if theta is large
|
|
136
|
+
theta_min = 0 # unit: radian
|
|
137
|
+
theta_max = 0.05 # unit: radian
|
|
138
|
+
z_min = 0
|
|
139
|
+
z_max = 4.0 # segment_length = (z_max - z_min) / nsegments (left out: box_size)
|
|
140
|
+
long_connector_ratio = 0.02 # longitudinal joint length = ratio * segment_length
|
|
141
|
+
|
|
142
|
+
# Material
|
|
143
|
+
skeleton_density = 1.5e-9 # unit: tonne/mm3
|
|
144
|
+
|
|
145
|
+
# Mesh operations
|
|
146
|
+
merge_operation = true # merge cell walls shorter than merge_tol
|
|
147
|
+
merge_tol = 0.01
|
|
148
|
+
|
|
149
|
+
precrackFlag = false
|
|
150
|
+
precrack_widths = 0.1
|
|
151
|
+
|
|
152
|
+
# Output files
|
|
153
|
+
stlFlag = true # 3D model (needs vtk: pip install "ringspy[vtk]")
|
|
154
|
+
inpFlag = true # input file for simulations
|
|
155
|
+
inpType = "Abaqus"
|
|
156
|
+
save_sites = false # also save wood_cube_sites.npy and wood_cube_radii.npy, to reuse the cells later
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
A parameter that is left out takes its default value, which is its value in `wood_cube.toml`; a misspelled parameter name is an error. Flags take `true`/`false` (the `'on'`/`'off'` strings of earlier versions also work).
|
|
160
|
+
|
|
161
|
+
- `geoName` is the geometry name, `path` is the folder where the mesh files will be generated (relative to the folder where `ringspy run` is started).
|
|
162
|
+
- `radial_growth_rule` is the radial growth rule for cell placement. When a file name with extension`.npy` is specified, a saved cell data file will be loaded (for v1.x, choose one of these rules: `binary`, `binary_lloyd`, `regular_hexagonal`, or a file name with extension `.npy`). The `.npy` file and its `_radii.npy` partner are looked for in the folder of the input file and its parents, or in `sites_dir` if given; `save_sites = true` saves them for a generated geometry.
|
|
163
|
+
- `iter_max` is the max number of iteration for randomly placing non-overlapping cell particles in the 2D toroidal cell placement region. Noticing that, larger `iter_max` leads to more centroidal Voronoi cells, for more reference, see [Wiki - Centroidal Voronoi Tessellation](https://en.wikipedia.org/wiki/Centroidal_Voronoi_tessellation/).
|
|
164
|
+
- `print_interval` is the print interval when every n cell particles are placed in the placement region.
|
|
165
|
+
- `seed` makes the random cell placement repeatable: the same seed gives the same files. Without a seed, every run gives a different geometry (the cells then come from NumPy's global random state, as in earlier versions). The seed is written to the report log.
|
|
166
|
+
- `r_min` and `r_max` are the upper and lower bounds of radii of toroidal cell placement regions (generation rings), `nrings` is the total number of rings.
|
|
167
|
+
- `width_heart`, `width_sparse`, and `width_dense`, are ring widths for innermost ring, rings with sparse cells, and rings with dense cells, respectively, which all together determine the morphology of the cellular structure.
|
|
168
|
+
- `generation_center` is the location of the placement region.
|
|
169
|
+
- `cellsize_sparse`,`cellsize_dense`, `cellwallthickness_sparse`, and `cellwallthickness_dense` are parameters for the sparse and dense cells.
|
|
170
|
+
- `boundaryFlag` flag can be turned on/off for generating neat boundaries consisting of grains.
|
|
171
|
+
- `box_shape` is the shape of cutting box (for v1.x, choose one of following shapes: `triangle`, `square`, or `hexagon`).
|
|
172
|
+
- `box_center`, and `box_size` are for describing the cutting box.
|
|
173
|
+
- `nsegments` is the number of segments consisting the prismatic cells during the z- (longitudinal) extrusion, with `segment_length = (z_max - z_min) / nsegments`.
|
|
174
|
+
- `theta_min` and `theta_max` determine the twisting angles (unit: radian) of the 2D mesh around the `generation_center`, during the spiral z-extrusion.
|
|
175
|
+
- `z_min` and `z_max` determine the boundaries of prismatic cells in z- (longitudinal) direction.
|
|
176
|
+
- `long_connector_ratio` is the length of longitudinal joints, with `longitudinal joint length = ratio * segment_length`.
|
|
177
|
+
- `skeleton_density` is the density of the skeleton (substance) material, e.g. density of wood cell walls in the wood microstructure.
|
|
178
|
+
- `merge_operation` flag can be turned on/off for the merging operation, when flag is on, cell ridges that are shorter than the threshold `merge_tol` in the 2D mesh will be deleted, and their vertices will be merged respectively, the mesh will be reconstructed. This is designed for eliminating small cell ridges/walls which fall out of the resolution range of the 3D printing and for avoiding having elements with too small stable time increments in numerical simulations.
|
|
179
|
+
- `precrackFlag` flag is for inserting pre-cracks, for the notched specimens. `precrack_nodes = [[x1, y1, x2, y2], ...]` gives the line segments of the cracks; when it is left out, a horizontal crack of length `0.1*box_size` through `box_center`, starting `0.12*box_size` from the left side of the box, is inserted. `precrack_widths` is the width of the cracks.
|
|
180
|
+
- `stlFlag` flag can be turned on/off for generating 3D STL files.
|
|
181
|
+
- `inpFlag` flag can be turned on/off for generating input files for numerical simulations.
|
|
182
|
+
- `inpType` indicates the software(s) that the mesh generation should generate input files for.
|
|
183
|
+
|
|
184
|
+

|
|
185
|
+
### 2.1. Run Mesh Generation
|
|
186
|
+
Open a Command Prompt or Terminal window, set the current directory to [examples](https://github.com/kingyin3613/ringspy/tree/main/examples/) or the folder of your own input file, then run the command:
|
|
187
|
+
```bash
|
|
188
|
+
ringspy run wood_cube.toml
|
|
189
|
+
```
|
|
190
|
+
(`python -m ringspy run wood_cube.toml` does the same.) The options `--seed`, `--path` and `--geoName` override the values in the file, e.g. `ringspy run wood_cube.toml --seed 7 --geoName wood_cube_7`.
|
|
191
|
+
|
|
192
|
+
Functions in `MeshGenTools` library will be called to create the initial mesh, wood cell particles following certain cell size distribution will be placed, then `Scipy.voronoi` function will be called to form the initial 2D Voronoi tessellation, additional code reforms the tesselation and generates the desired files. A successful generation will end with the line "Mesh files written to ..." in the Terminal window.
|
|
193
|
+
|
|
194
|
+
A new folder should have been created in the `.\meshes` directory with the same name as the `geoName` in `wood_cube.toml`.
|
|
195
|
+
|
|
196
|
+
The same generation can be run from Python, e.g. to loop over parameters:
|
|
197
|
+
```python
|
|
198
|
+
import ringspy
|
|
199
|
+
|
|
200
|
+
result = ringspy.generate("wood_cube.toml") # same as: ringspy run wood_cube.toml
|
|
201
|
+
for seed in range(5):
|
|
202
|
+
ringspy.generate("wood_cube.toml", seed=seed, geoName=f"wood_cube_{seed}", stlFlag=False)
|
|
203
|
+
|
|
204
|
+
config = ringspy.Config(geoName="small_cube", r_max=2, box_size=1.0, seed=1) # parameters left out: defaults
|
|
205
|
+
result = ringspy.generate(config)
|
|
206
|
+
print(result.output_dir, result.nParticles, result.porosity)
|
|
207
|
+
```
|
|
208
|
+
Each example also has a short Python script next to it, e.g. `python wood_cube.py`.
|
|
209
|
+
|
|
210
|
+
*Note: template scripts of earlier versions (e.g. `tests/test_wood_cube.py` of v1.1), which call the `MeshGenTools` functions one by one, still work. Their placement functions take an optional `rng` argument (a seed or a `numpy.random.Generator`) to make the cell placement repeatable.*
|
|
211
|
+
|
|
212
|
+
${\textbf{(New feature in version v0.4.x)}}$
|
|
213
|
+
|
|
214
|
+
The Lloyd's relaxation (a.k.a. Lloyd's algorithm) has been integrated with the mesh generation, one may use this approach by changing the following line in the input file (see [`wood_cube_lloyd.toml`](https://github.com/kingyin3613/ringspy/tree/main/examples/wood_cube_lloyd.toml)):
|
|
215
|
+
```toml
|
|
216
|
+
radial_growth_rule = "binary_lloyd"
|
|
217
|
+
```
|
|
218
|
+
This allows a rapid radial generation of more regular centroidal Voronoi cells from the `generation_center` (see the difference between `wood_binary` and `wood_binary_lloyd` in the preview of 2D cross-sections in section 2.2). For more detail of the algorithm, see [Wiki - Lloyd's algorithm](https://en.wikipedia.org/wiki/Lloyd's_algorithm)).
|
|
219
|
+
|
|
220
|
+

|
|
221
|
+
|
|
222
|
+
### 2.2. Check Mesh and 3D Model Files
|
|
223
|
+
|
|
224
|
+
The following files should be generated in the `.\meshes\geoName` directory with a successful run:
|
|
225
|
+
- Log file
|
|
226
|
+
- Log file for model generation: `wood_cube-report.log`
|
|
227
|
+
- Mesh files
|
|
228
|
+
- Non-Uniform Rational B-Splines (NURBS) beam file: `wood_cubeIGA.txt`
|
|
229
|
+
- connector data file: `wood_cube-mesh.txt`
|
|
230
|
+
- Grain-ridge data file: `wood_cube-vertex.mesh`
|
|
231
|
+
- Ridge data file: `wood_cube-ridge.mesh`
|
|
232
|
+
- Visualization files
|
|
233
|
+
- Cross-sectional image file for initial 2D configuration: `wood_cube.png`
|
|
234
|
+
- Paraview vtk file for initial vertex configuration: `wood_cube_vertices.vtu`
|
|
235
|
+
- Paraview vtk file for initial grain solid configuration: `wood_cube_beams.vtu`
|
|
236
|
+
- Paraview vtk file of initial cell ridge configuration: `wood_cube_conns.vtu`
|
|
237
|
+
- Paraview vtk file of initial connector (volume) configuration: `wood_cube_conns_vol.vtu`
|
|
238
|
+
- The `.vtu` files are written as text. For large models, `rpgen.VisualizationFiles(..., vtk_format='binary')` writes them as binary files instead, which are faster to write and read and about 3 times smaller.
|
|
239
|
+
- (Optional) 3D model files
|
|
240
|
+
- Binary STL file of initial cellular solid configuration: `wood_cube.stl`
|
|
241
|
+
- (Optional) Abaqus input files
|
|
242
|
+
- INP file of simulation input of initial cellular solid configuration in `Abaqus`: `wood_cube.inp`
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+

|
|
246
|
+
|
|
247
|
+
### 3. Visualization
|
|
248
|
+
A scientific visualization application `ParaView` can directly visualize the generated vtk files; It can also visualize generated 3D model STL files if the STL flag is on. `Paraview` is a free software, it can be downloaded from its official website: [https://www.paraview.org/download/](https://www.paraview.org/download/), latest version is recommeded.
|
|
249
|
+
|
|
250
|
+
### 3.1. Visualize Components of the 3D Model in ParaView
|
|
251
|
+
1. Open ParaView
|
|
252
|
+
2. Recommeded to temporarily turn off ray tracing
|
|
253
|
+
- Uncheck "Enable Ray Tracing" (bottom left)
|
|
254
|
+
3. Open File Sets in `.\meshes\geoName`
|
|
255
|
+
- File > Open...
|
|
256
|
+
4. Select the visualization files containing: `_vertices.vtu`, `_beams.vtu`, `_conns.vtu`
|
|
257
|
+
5. Apply to visualize
|
|
258
|
+
- Press Apply (left side, center)
|
|
259
|
+
6. Turn on color plotting
|
|
260
|
+
- Left click `_conns.vtu`, then select coloring (mid/lower left) > Connector_width
|
|
261
|
+
7. Scale and position the image as desired
|
|
262
|
+
8. Turn back on Ray Tracing
|
|
263
|
+
9. Adjust Ray Tracing lighting and settings as desired
|
|
264
|
+
10. Export Image
|
|
265
|
+
- File > Save Screenshot
|
|
266
|
+
- Enter a file name > OK
|
|
267
|
+
- Leave new window as-is or increase resolution > OK
|
|
268
|
+
|
|
269
|
+
### 3.2. Visualize Volumes of the 3D Model in ParaView
|
|
270
|
+
1. Open Paraview
|
|
271
|
+
2. Recommeded to temporarily turn off ray tracing
|
|
272
|
+
- Uncheck "Enable Ray Tracing" (bottom left)
|
|
273
|
+
3. Open File Sets in `.\meshes\geoName`
|
|
274
|
+
- File > Open...
|
|
275
|
+
4. Select the newly created visualization files containing: `_conns_vol.vtu`
|
|
276
|
+
5. Apply to visualize
|
|
277
|
+
- Press Apply (left side, center)
|
|
278
|
+
6. Turn on color plotting
|
|
279
|
+
- Left click `_conns_vol.vtu`, then select coloring (mid/lower left) > Connector_width
|
|
280
|
+
7. Scale and position the image as desired
|
|
281
|
+
8. Turn back on Ray Tracing
|
|
282
|
+
9. Adjust Ray Tracing lighting and settings as desired
|
|
283
|
+
10. Export Image
|
|
284
|
+
- File > Save Screenshot
|
|
285
|
+
- Enter a file name > OK
|
|
286
|
+
- Leave new window as-is or increase resolution > OK
|
|
287
|
+

|
|
288
|
+
|
|
289
|
+
### 4. (Optional) Numerical Simulation
|
|
290
|
+
The mesh generation tool can also prepare the input files for the numerical simulations of the cellular solid in other softwares. By now (version 1.x), the input file format, `.inp`, that is used in a finite element method (FEM) software `Abaqus` is supported, if the INP flag is on. `Abaqus` is a commerical software suite for integrated computer-aided engineering (CAE) and finite element analysis, own by `Dassault Systèmes`. One may refer to its [Wiki](https://en.wikipedia.org/wiki/Abaqus) for more about `Abaqus`, and to [Introduction](https://bertoldi.seas.harvard.edu/files/bertoldi/files/abaqusinputfilemanualv1.pdf?m=1444417191) for the introduction of Abaqus input files.
|
|
291
|
+
|
|
292
|
+
All steps for the model setup can be accomplished through manually coding the Abaqus input file in a text editor. The method used in the example procedure shown below requires access to the Abaqus GUI.
|
|
293
|
+
|
|
294
|
+
### 4.1 Create New Model
|
|
295
|
+
1. Open Abaqus CAE
|
|
296
|
+
2. Create a new model
|
|
297
|
+
- File > New Model Database > With Standard/Explicit Model
|
|
298
|
+
|
|
299
|
+
### 4.2 Import Meshed Part
|
|
300
|
+
|
|
301
|
+
1. Import the meshed part
|
|
302
|
+
- File > Import > Part
|
|
303
|
+
- Select the newly created file which ends in `.inp` (note: you may need to change the File Filter to see this file)
|
|
304
|
+
- Click OK
|
|
305
|
+
2. Rename part
|
|
306
|
+
- Under the model tree (left) expand `Parts`
|
|
307
|
+
- Right click on the part > Rename...
|
|
308
|
+
- Enter a new name less than 14 characters, no special symbols, and easily recognizable (i.e. "WoodCube")
|
|
309
|
+
|
|
310
|
+
*Note: if FEM parts will be added to the model, this RingsPy generated part must come first alphabetically. Also recommended not to include numbers in the name.*
|
|
311
|
+
|
|
312
|
+

|
|
313
|
+
|
|
314
|
+
## Contributing
|
|
315
|
+
[](https://doi.org/10.21105/joss.04945)
|
|
316
|
+
|
|
317
|
+
If you make use of this code, or find it is useful for your own research , please cite the JOSS paper:
|
|
318
|
+
```
|
|
319
|
+
@article{ringspy,
|
|
320
|
+
doi = {10.21105/joss.04945},
|
|
321
|
+
url = {https://doi.org/10.21105/joss.04945},
|
|
322
|
+
year = {2023},
|
|
323
|
+
publisher = {The Open Journal},
|
|
324
|
+
volume = {8},
|
|
325
|
+
number = {83},
|
|
326
|
+
pages = {4945},
|
|
327
|
+
author = {Hao Yin and Gianluca Cusatis},
|
|
328
|
+
title = {RingsPy: A Python package for Voronoi mesh generation of cellular solids with radial growth pattern},
|
|
329
|
+
journal = {Journal of Open Source Software}
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Contributions are always welcome!
|
|
334
|
+
|
|
335
|
+
If you wish to contribute code/algorithms to this project, or to propose a collaboration study, please send an email to haoyin2022 [at] u.northwestern.edu .
|
|
336
|
+
## License
|
|
337
|
+

|
|
338
|
+
|
|
339
|
+
Distributed under the GPL v3 license.
|
|
340
|
+
|
|
341
|
+
|