upxo.pxtal.fm_steel_3d.with_subblocks_3d module
FMSteel3DWithSubBlocks: Final state class with full FM steel hierarchy including sub-blocks.
Extends FMSteel3DWithOrientations by adding sub-block (lath) level subdivision within each martensitic block, with per-sub-block orientation spread.
- Classes:
FMSteel3DWithSubBlocks: Complete FM steel state class with sub-block hierarchy.
- class upxo.pxtal.fm_steel_3d.with_subblocks_3d.FMSteel3DWithSubBlocks(parent, all_subblocks: Dict[str, numpy.ndarray], block_to_subblocks_map: Dict[str, List[str]], subblock_orientations: Dict[str, Tuple[float, float, float]], subblock_slicing_normals: Dict[str, numpy.ndarray] | None = None, random_seed: int | None = None, verbosity: int | None = None, log_sink=None)[source]
Bases:
objectComplete 3D FM steel microstructure with sub-block (lath) hierarchy.
Hierarchy: grains -> PAGs -> packets -> blocks -> sub-blocks
- _parent
Parent orientation state (full block hierarchy with orientations).
- all_subblocks
{subblock_id: (n_voxels, 3) voxel coordinate array}. Sub-block naming: ‘SB_{block_id}_{local}’ where block_id follows the ‘B_{pag_id}_{packet_id}_{local}’ convention.
- block_to_subblocks_map
{block_id: [subblock_id, …]} — maps every block to its sub-blocks.
- subblock_orientations
{subblock_id: (phi1, Phi, phi2)} in degrees — parent block orientation plus a small intra-block spread perturbation.
- subblock_slicing_normals
{subblock_id: unit_normal (3,)} — inherited from parent block.
- all_subblocks
- block_to_subblocks_map
- subblock_orientations
- subblock_slicing_normals
- property lgi: numpy.ndarray
- property grain_locs: Dict[int, numpy.ndarray]
- property all_blocks: Dict[str, numpy.ndarray]
- property grain_to_blocks_map: Dict[int, List[str]]
grain_id -> [block_id, …] (keys are grain_ids = packet ids).
- property grain_to_local_pkt_idx: Dict[int, int]
grain_id -> local_idx.
- Type:
1-based local packet ordinal within each PAG
- property grain_to_plane_idx: Dict[int, int]
grain_id -> {111}FCC habit-plane index (0-3) from parent block level.
- property grain_orientations: Dict[int, Tuple[float, float, float]]
Grain-level BCC orientations from parent orientations level.
- property block_slicing_normals: Dict[str, numpy.ndarray]
block_id -> unit normal of the {111}FCC habit plane used to slice it, from parent block level (see FMSteel3DWithBlocks docstring).
- property block_to_variant_idx: Dict[str, int]
block_id -> KS variant index (0-5) within its packet, from parent orientations level (see FMSteel3DWithOrientations docstring).
- property physical_dimensions
- property isolated_grains
Isolated grains from parent PAG level.
- property retained_austenite_pag_ids
Retained-austenite PAG IDs from parent PAG level (see FMSteel3DWithPAGs docstring).
- ensure_isolated_grain_orientations(random_seed: int | None = None) None[source]
See FMSteel3DWithPAGs.ensure_isolated_grain_orientations.
- get_isolated_grain_orientation(gid: int) Tuple[float, float, float] | None[source]
See FMSteel3DWithPAGs.get_isolated_grain_orientation.
- get_phase_voxels_and_orientations(phase_id: int) Tuple[Dict, Dict[int, Tuple[float, float, float]]][source]
See FMSteel3DWithOrientations.get_phase_voxels_and_orientations.
PHASE_MARTENSITE here is sub-block granularity (all_subblocks, subblock_orientations) – the finer level this class adds; retained austenite has no sub-block subdivision, so it stays grain granularity exactly as at the block level.