From 9e3506b8ef21e444cb7884b8cd05d69579e4f484 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Fri, 25 Sep 2020 07:41:58 +0200 Subject: [PATCH] thorougly testing seeding functionality --- python/damask/seeds.py | 2 +- python/tests/test_seeds.py | 28 +++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/python/damask/seeds.py b/python/damask/seeds.py index ea40794da..9aab953d0 100644 --- a/python/damask/seeds.py +++ b/python/damask/seeds.py @@ -95,7 +95,7 @@ def from_geom(geom,selection=None,invert=False,average=False,periodic=True): """ material = geom.material.reshape((-1,1),order='F') mask = _np.full(geom.grid.prod(),True,dtype=bool) if selection is None else \ - _np.isin(material,selection,invert=invert) + _np.isin(material,selection,invert=invert).flatten() coords = grid_filters.cell_coord0(geom.grid,geom.size).reshape(-1,3,order='F') if not average: diff --git a/python/tests/test_seeds.py b/python/tests/test_seeds.py index 49d9a6bfd..c9ad6f0e3 100644 --- a/python/tests/test_seeds.py +++ b/python/tests/test_seeds.py @@ -3,6 +3,7 @@ import numpy as np from scipy.spatial import cKDTree from damask import seeds +from damask import grid_filters from damask import Geom class TestSeeds: @@ -25,7 +26,7 @@ class TestSeeds: cKDTree(coords).query(coords, 2) assert (0<= coords).all() and (coords=distance - def test_from_geom(self): + 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) @@ -34,3 +35,28 @@ class TestSeeds: 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() + + @pytest.mark.parametrize('periodic',[True,False]) + @pytest.mark.parametrize('average',[True,False]) + def test_from_geom_grid(self,periodic,average): + grid = np.random.randint(10,20,3) + size = np.ones(3) + np.random.random(3) + coords = grid_filters.cell_coord0(grid,size).reshape(-1,3) + np.random.shuffle(coords) + geom_1 = Geom.from_Voronoi_tessellation(grid,size,coords) + coords,material = seeds.from_geom(geom_1,average=average,periodic=periodic) + geom_2 = Geom.from_Voronoi_tessellation(grid,size,coords,material) + assert (geom_2.material==geom_1.material).all() + + @pytest.mark.parametrize('periodic',[True,False]) + @pytest.mark.parametrize('average',[True,False]) + @pytest.mark.parametrize('invert',[True,False]) + 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()