Skip to content

Commit e2854df

Browse files
authored
Add raster mesh (#45)
addresses (#44)
1 parent cb1a18c commit e2854df

File tree

6 files changed

+701
-16
lines changed

6 files changed

+701
-16
lines changed

CHANGELOG.rst

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ All notable changes to this project will be documented in this file.
66
The format is based on `Keep a Changelog`_,
77
and this project adheres to `Semantic Versioning`_.
88

9+
`1.5.0`_ - 2021-09-08
10+
--------------------------
11+
Added
12+
'''''
13+
- RasterMesh class, to create pixel/voxel meshes. (addresses `#44`_)
14+
915
`1.4.10`_ - 2021-06-08
1016
--------------------------
1117
Fixed
@@ -237,7 +243,8 @@ Added
237243

238244
.. LINKS
239245
240-
.. _`Unreleased`: https://github.com/kip-hart/MicroStructPy/compare/v1.4.10...HEAD
246+
.. _`Unreleased`: https://github.com/kip-hart/MicroStructPy/compare/v1.5.0...HEAD
247+
.. _`1.5.0`: https://github.com/kip-hart/MicroStructPy/compare/v1.4.10...v1.5.0
241248
.. _`1.4.10`: https://github.com/kip-hart/MicroStructPy/compare/v1.4.9...v1.4.10
242249
.. _`1.4.9`: https://github.com/kip-hart/MicroStructPy/compare/v1.4.8...v1.4.9
243250
.. _`1.4.8`: https://github.com/kip-hart/MicroStructPy/compare/v1.4.7...v1.4.8
@@ -270,3 +277,4 @@ Added
270277

271278
.. _`#14`: https://github.com/kip-hart/MicroStructPy/issues/14
272279
.. _`#16`: https://github.com/kip-hart/MicroStructPy/issues/16
280+
.. _`#44`: https://github.com/kip-hart/MicroStructPy/issues/44

docs/source/cli/settings.rst

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ quality, among other things. The default settings are:
4343
<edge_opt> False </edge_opt>
4444
<edge_opt_n_iter> 100 </edge_opt_n_iter>
4545
46-
<mesher> Triangle/TetGen </mesher>
46+
<mesher> Triangle/TetGen </mesher>
4747
4848
<mesh_size> inf </mesh_size> <!-- used with gmsh -->
4949
<mesh_max_volume> inf </mesh_max_volume> <!-- used with Triangle and TetGen -->
@@ -286,6 +286,18 @@ The default is ``<edge_opt_n_iter> 100 </edge_opt_n_iter>``, which limits the
286286
optimizer to 100 attempts per edge.
287287
This field is ignored if ``edge_opt`` is set to ``False``.
288288

289+
mesher
290+
------
291+
292+
This field specifies how to mesh the PolyMesh. If set to ``raster``, the output
293+
mesh will contain pixels/voxels of the PolyMesh.
294+
Other options include ``Triangle/Tetgen`` and ``gmsh``.
295+
296+
mesh_size
297+
---------
298+
299+
This field specifies a target element size if using the ``gmsh`` mesher.
300+
289301
mesh_max_volume
290302
---------------
291303

src/microstructpy/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
import microstructpy.seeding
55
import microstructpy.verification
66

7-
__version__ = '1.4.10'
7+
__version__ = '1.5.0'

src/microstructpy/cli.py

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from microstructpy import seeding
3030
from microstructpy import verification
3131
from microstructpy.meshing import PolyMesh
32+
from microstructpy.meshing import RasterMesh
3233
from microstructpy.meshing import TriMesh
3334
from microstructpy.meshing.trimesh import facet_check
3435

@@ -301,7 +302,8 @@ def run(phases, domain, verbose=False, restart=True, directory='.',
301302
edge_opt_n_iter (int): *(optional)* Maximum number of iterations per
302303
edge during optimization. Ignored if `edge_opt` set to False.
303304
Defaults to 100.
304-
mesher (str): {'Triangle/TetGen' | 'Triangle' | 'TetGen' | 'gmsh'}
305+
mesher (str): {'raster' | 'Triangle/TetGen' | 'Triangle' | 'TetGen' |
306+
'gmsh'}
305307
specify the mesh generator. Default is 'Triangle/TetGen'.
306308
mesh_max_volume (float): *(optional)* The maximum volume (area in 2D)
307309
of a mesh cell in the triangular mesh. Default is infinity,
@@ -491,28 +493,41 @@ def run(phases, domain, verbose=False, restart=True, directory='.',
491493
# ----------------------------------------------------------------------- #
492494
# Create Triangular Mesh #
493495
# ----------------------------------------------------------------------- #
494-
tri_basename = 'trimesh.txt'
496+
raster = mesher == 'raster'
497+
if raster:
498+
tri_basename = 'rastermesh.txt'
499+
else:
500+
tri_basename = 'trimesh.txt'
495501
tri_filename = os.path.join(directory, tri_basename)
496502
exts = {'abaqus': '.inp', 'txt': '.txt', 'str': '.txt', 'tet/tri': '',
497503
'vtk': '.vtk'}
498504

499505
if restart and os.path.exists(tri_filename) and not poly_created:
500506
# Read triangle mesh
501507
if verbose:
502-
print('Reading triangular mesh.')
503-
print('Triangular mesh filename: ' + tri_filename)
508+
if raster:
509+
print('Reading raster mesh.')
510+
else:
511+
print('Reading triangular mesh.')
512+
print('Mesh filename: ' + tri_filename)
504513

505514
tmesh = TriMesh.from_file(tri_filename)
506515
tri_created = False
507516
else:
508517
tri_created = True
509518
# Create triangular mesh
510519
if verbose:
511-
print('Creating triangular mesh.')
520+
if raster:
521+
print('Creating raster mesh.')
522+
else:
523+
print('Creating triangular mesh.')
512524

513-
tmesh = TriMesh.from_polymesh(pmesh, phases, mesher, mesh_min_angle,
514-
mesh_max_volume, mesh_max_edge_length,
515-
mesh_size)
525+
if raster:
526+
tmesh = RasterMesh.from_polymesh(pmesh, mesh_size, phases)
527+
else:
528+
tmesh = TriMesh.from_polymesh(pmesh, phases, mesher,
529+
mesh_min_angle, mesh_max_volume,
530+
mesh_max_edge_length, mesh_size)
516531

517532
# Write triangular mesh
518533
tri_types = filetypes.get('tri', [])
@@ -535,12 +550,19 @@ def run(phases, domain, verbose=False, restart=True, directory='.',
535550

536551
plot_files = []
537552
for ext in plot_types:
538-
fname = os.path.join(directory, 'trimesh.' + str(ext))
553+
if raster:
554+
bname = 'rastermesh'
555+
else:
556+
bname = 'trimesh'
557+
fname = os.path.join(directory, bname + '.' + str(ext))
539558
if tri_created or not os.path.exists(fname):
540559
plot_files.append(fname)
541560

542561
if plot_files and verbose:
543-
print('Plotting triangular mesh.')
562+
if raster:
563+
print('Plotting raster mesh.')
564+
else:
565+
print('Plotting triangular mesh.')
544566

545567
if plot_files:
546568
plot_tri(tmesh, phases, seeds, pmesh, plot_files, plot_axes, color_by,
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from microstructpy.meshing.polymesh import PolyMesh
2+
from microstructpy.meshing.trimesh import RasterMesh
23
from microstructpy.meshing.trimesh import TriMesh
34

4-
__all__ = ['PolyMesh', 'TriMesh']
5+
__all__ = ['PolyMesh', 'RasterMesh', 'TriMesh']

0 commit comments

Comments
 (0)