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: object

A 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
set_gids(gids=None)[source]

Set or update gids.

ignore_gids(gids_to_ignore)[source]

Ignore gids.

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_element_name(elname: str = None)[source]

Set or update element name.

set_analysis_package(analysis_package: str)[source]

Set or update analysis package.

set_pxtal_orientations(xori=None, xoriType='bunge', xoriUnits='degree')[source]

Set or update pxtal orientations.

map_pxtal_orientations_to_elements()[source]

Map pxtal orientations to elements.

make_base_coordinates_ABQ(**kwargs)[source]

Build and return base coordinates ABQ.

cross_check_nel()[source]

Cross check nel.

define_nodeNumbers_ABQ(**kwargs)[source]

Example

define_nodeNumbers() # For ‘quad4’ num_valid_nodes, valid_mask_T = define_nodeNumbers() # For ‘quad8’

define_nodes_ABQ(**kwargs)[source]

Define nodes abq.

define_elementNumbers_ABQ(**kwargs)[source]

Define elementnumbers abq.

define_element_locations_ABQ(**kwargs)[source]

Define element locations abq.

define_connectivity_ABQ(**kwargs)[source]

Example

el_ids, connectivity = define_connectivity(elLoc, nnum)

get_element_node_coordinates_ABQ(**kwargs)[source]

Extract Element Node Coordinates

calculate_element_centroids_ABQ(**kwargs)[source]

Centroid Calculation

define_elements_ABQ(**kwargs)[source]

Create ELEMENTS dict

define_ABQ_elements()[source]

Create ELEMENTS dict

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_element_ids_to_remove(lfi_locs_to_remove)[source]

Find element ids to remove.

find_boundary_features(boundary_offsets)[source]

Find boundary features.

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.

prune(lfi_locs_to_remove)[source]

Prune.

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