def seeds_from_random(size, num_grains, phase_label, grid_size=None, orientation_coordinate_system=None): from damask import seeds from damask import Rotation size = np.array(size) grid_size = grid_size and np.array(grid_size) position = seeds.from_random(size, num_grains, cells=grid_size) rotation = Rotation.from_random(shape=(num_grains,)) out = { 'microstructure_seeds': { 'position': position, 'orientations': { 'type': 'quat', 'quaternions': rotation.quaternion, 'orientation_coordinate_system': orientation_coordinate_system, 'unit_cell_alignment': { 'x': 'a', 'z': 'c', }, 'P': -1, }, 'size': size, 'random_seed': None, 'phase_label': phase_label, } } return out
def test_from_table_recover(self,tmp_path): cells = np.random.randint(60,100,3) size = np.ones(3)+np.random.rand(3) s = seeds.from_random(size,np.random.randint(60,100)) grid = Grid.from_Voronoi_tessellation(cells,size,s) coords = grid_filters.coordinates0_point(cells,size) t = Table(np.column_stack((coords.reshape(-1,3,order='F'),grid.material.flatten(order='F'))),{'c':3,'m':1}) assert grid_equal(grid.sort().renumber(),Grid.from_table(t,'c',['m']))
def test_regrid_double_cells(self): size = np.random.random(3) # noqa cells = np.random.randint(8, 32, (3)) g = Grid.from_Voronoi_tessellation(cells, size, seeds.from_random(size, 10)) F = np.broadcast_to(np.eye(3), tuple(cells) + (3, 3)) assert all( g.scale(cells * 2).material.flatten() == g.material.flatten()[ grid_filters.regrid(size, F, cells * 2)])
def test_from_geom_reconstruct(self): grid = np.random.randint(10, 20, 3) N_seeds = np.random.randint(30, 300) size = np.ones(3) + np.random.random(3) coords = seeds.from_random(size, N_seeds, grid) geom_1 = Geom.from_Voronoi_tessellation(grid, size, coords) coords, material = seeds.from_geom(geom_1) geom_2 = Geom.from_Voronoi_tessellation(grid, size, coords, material) assert (geom_2.material == geom_1.material).all()
def test_from_grid_reconstruct(self): cells = np.random.randint(10, 20, 3) N_seeds = np.random.randint(30, 300) size = np.ones(3) + np.random.random(3) coords = seeds.from_random(size, N_seeds, cells) grid_1 = Grid.from_Voronoi_tessellation(cells, size, coords) coords, material = seeds.from_grid(grid_1) grid_2 = Grid.from_Voronoi_tessellation(cells, size, coords, material) assert (grid_2.material == grid_1.material).all()
def test_from_geom_selection(self, periodic, average, invert): grid = np.random.randint(10, 20, 3) N_seeds = np.random.randint(30, 300) size = np.ones(3) + np.random.random(3) coords = seeds.from_random(size, N_seeds, grid) geom = Geom.from_Voronoi_tessellation(grid, size, coords) selection = np.random.randint(N_seeds) + 1 coords, material = seeds.from_geom(geom, average=average, periodic=periodic, invert=invert, selection=[selection]) assert selection not in material if invert else (selection == material).all()
def test_from_random(self, grid): N_seeds = np.random.randint(30, 300) size = np.ones(3) + np.random.random(3) coords = seeds.from_random(size, N_seeds, grid) assert (0 <= coords).all() and (coords < size).all()