upxo.meshing.nonConformalMesher module
- class upxo.meshing.nonConformalMesher.nonConformalMesher(dim=2, etype='quad4', lfi=numpy.random.randint, gids=None, nelx=10, nely=10, nelz=10, xstart=0, ystart=0, zstart=0, ellx=1, elly=1, ellz=1, plane_stress=True, reduced_integration=False, modifiedFormulation=False, axiSymmElements=False)[source]
Bases:
objectA class to generate non-conformal meshes for 2D and 3D geometries. Supports element types: Quad4, Quad8, Tri3, Tri6, Hex8, Hex20, Tet5. 2D Element Types: Quad4, Quad8, Tri3, Tri6 3D Element Types: Hex8, Hex20, Tet5
Usage
from upxo.meshing.nonConformalMesher import nonConformalMesher as ncm
Example
lfi = np.array([[1, 3, 3, 3], [4, 1, 3, 2]], dtype=np.int32) gids = np.unique(lfi) m = ncm.quad4(lfi=lfi, gids=gids, nelx=4, nely=2,
xstart=0.0, ystart=0.0, ellx=0.2, elly=0.1)
m.mesh(analysis_package=’abaqus’, elsetNamePrefix=’gid_’) m.see_mesh()
- valid_image_data = ('lfi', 'phmap', 'custom')
- valid_xoriTypes = ('bunge', 'zxz', 'matthies', 'mtex', 'zyz', 'roe', 'kocks', 'canova', 'miller', 'rot', 'quat', 'axisangle')
- ABQ_ENAMES = {'c3d_hex': ['C3D8', 'C3D8R', 'C3D8I', 'C3D20', 'C3D20R'], 'c3d_pyramid': ['C3D5'], 'c3d_tet': ['C3D4', 'C3D10', 'C3D10M'], 'c3d_wedge': ['C3D6', 'C3D15'], 'cax': ['CAX3', 'CAX4', 'CAX4R', 'CAX6', 'CAX8', 'CAX8R'], 'cpe': ['CPE3', 'CPE4', 'CPE4R', 'CPE6', 'CPE8', 'CPE8R'], 'cps': ['CPS3', 'CPS4', 'CPS4R', 'CPS6', 'CPS8', 'CPS8R']}
- dim
- etype
- lfi
- nelx
- nely
- nelz
- xstart
- ystart
- zstart
- ellx
- elly
- ellz
- plane_stress
- reduced_integration
- axiSymmElements
- modifiedFormulation
- vertexNodeIds
- midSideNodeIds
- boundaryNodeIds
- nn
- nel
- nnInExRatio
- nelInExRatio
- floatDType
- temp_container
- xori
- xoriType
- xoriUnits
- classmethod quad(lfi=numpy.random.randint, gids=None, nelx=10, nely=10, nelz=0, xstart=0, ystart=0, zstart=0, ellx=1, elly=1, ellz=1, nnodes=4, plane_stress=True, reduced_integration=False, modifiedFormulation=False, axiSymmElements=False)[source]
Class method to create a nonConformalMesher instance with Quad elements.
Example
- m = nonConformalMesher.quad(lfi=my_lfi, gids=my_gids, nelx=20, nely=20,
xstart=0.0, ystart=0.0, ellx=1.0, elly=1.0)
- classmethod tri(lfi=numpy.random.randint, gids=None, nelx=10, nely=10, nelz=0, xstart=0, ystart=0, zstart=0, ellx=1, elly=1, ellz=1, nnodes=3, plane_stress=True, reduced_integration=False, modifiedFormulation=False, axiSymmElements=False)[source]
Class method to create a nonConformalMesher instance with Tri elements.
Example
- m = nonConformalMesher.tri(lfi=my_lfi, gids=my_gids, nelx=20, nely=20,
xstart=0.0, ystart=0.0, ellx=1.0, elly=1.0)
- classmethod hex(lfi=numpy.random.randint, gids=None, nelx=10, nely=10, nelz=10, xstart=0, ystart=0, zstart=0, ellx=1, elly=1, ellz=1, nnodes=8, reduced_integration=False, modifiedFormulation=False)[source]
Class method to create a nonConformalMesher instance with Hex8 elements.
Example
- m = nonConformalMesher.hex8(lfi=my_lfi, gids=my_gids, nelx=20, nely=20, nelz=20,
xstart=0.0, ystart=0.0, zstart=0.0, ellx=1.0, elly=1.0, ellz=1.0)
- classmethod tet(lfi=numpy.random.randint, gids=None, nelx=10, nely=10, nelz=10, xstart=0, ystart=0, zstart=0, ellx=1, elly=1, ellz=1, nnodes=4, reduced_integration=False, modifiedFormulation=False)[source]
Example
- m = nonConformalMesher.tet5(lfi=my_lfi, gids=my_gids, nelx=20, nely=20, nelz=20,
xstart=0.0, ystart=0.0, zstart=0.0, ellx=1.0, elly=1.0, ellz=1.0)
- mesh(analysis_package='abaqus', elsetNamePrefixBasic='gid_')[source]
Core orchastrator function for non-conformal meshing in this class.
The function branches execution as per the element types and the analysis package. All parameters are updated to self object.
- set_pxtal_orientations(xori=None, xoriType='bunge', xoriUnits='degree')[source]
Set or update pxtal orientations.
- define_nodeNumbers_ABQ(**kwargs)[source]
Example
define_nodeNumbers() # For ‘quad4’ num_valid_nodes, valid_mask_T = define_nodeNumbers() # For ‘quad8’
- define_connectivity_ABQ(**kwargs)[source]
Example
el_ids, connectivity = define_connectivity(elLoc, nnum)
- make_elsets_quad4_ABQ_basic(elsetNamePrefixBasic='gid_')[source]
Build and return elsets quad4 ABQ basic.
- set_threshold_nel_for_large_mesh_elEdgePlot_(value: int)[source]
Set or update threshold nel for large mesh elEdgePlot .
- see_mesh(figsize=(10, 5), dpi=150, imageDataType='lfi', imageData=None, imageDataTitle='LFI', featureName='grains', elsetType='basic', overlapOnIMAGE=True, cmap='nipy_spectral', showColorBar=True, IMAGEalpha=0.3, nodes=True, nodeMarker='s', nodeMarkerFaceColor='grey', nodeMarkerEdgeColor='black', nodeMarkerSize=8, nodeNumbers=True, nodeNumberTextColour='blue', nodeNumberTextLocOffsetFactor=20, nodeNumberTextFontSize=16, elementNumbers=True, elementNumberTextColour='red', elementNumberTextLocOffsetFactor=20, elementNumberTextFontSize=16, elementNumberTextFontWeight='bold', elementEdges=True, elementEdgeLineColor='grey', elementEdgeLineStyle='--', elementEdgeLineWidth=0.5, elementCentroids=True, elementCentroidMarker='o', elementCentroidMarkerSize=2, returnFigAx=False, includeLabels=False, xlabelText='', ylabelText='', xlabelTextFontSize=14, ylabelTextFontSize=14, xlabelTextFontWeight='normal', ylabelTextFontWeight='normal', includeTitle=False, titleText='', titleTextFontSize=14, titleTextFontWeight='normal')[source]
See mesh.
- find_pruning_locations(pharr=None, dim=2, method='cellSize', measure='npixels', unitSize=1.0, threshold=[0, 0.5], phaseValue=1, thresholdingRule='quantile', exclude_boundary_features=True, boundary_offsets=[1, 1, 1, 1])[source]
Find pruning locations.
- xincr
- yincr
- zincr
- xbase
- ybase
- zbase
- xndgrid
- yndgrid
- zndgrid
- gids
- ignored_gids
- phmap
- nnum
- NODES
- enum
- elLoc
- ELEMENTS
- el_ids
- nidStart
- elifStart
- boundaryElIds
- ABQ_ELEMENTS
- elsets
- connectivity
- elname
- el_node_coords
- elCentroids
- analysis_package