diff --git a/python/damask/_crystal.py b/python/damask/_crystal.py index 689398cf6..00c7af718 100644 --- a/python/damask/_crystal.py +++ b/python/damask/_crystal.py @@ -378,7 +378,7 @@ class Crystal(): """ _kinematics = { 'cF': { - 'slip' :[np.array([ + 'slip': [np.array([ [+0,+1,-1, +1,+1,+1], [-1,+0,+1, +1,+1,+1], [+1,-1,+0, +1,+1,+1], @@ -398,7 +398,7 @@ class Crystal(): [+1,+0,-1, +1,+0,+1], [+0,+1,+1, +0,+1,-1], [+0,+1,-1, +0,+1,+1]])], - 'twin' :[np.array([ + 'twin': [np.array([ [-2, 1, 1, 1, 1, 1], [ 1,-2, 1, 1, 1, 1], [ 1, 1,-2, 1, 1, 1], @@ -413,7 +413,7 @@ class Crystal(): [-1, 1, 2, -1, 1,-1]])] }, 'cI': { - 'slip' :[np.array([ + 'slip': [np.array([ [+1,-1,+1, +0,+1,+1], [-1,-1,+1, +0,+1,+1], [+1,+1,+1, +0,-1,+1], @@ -464,7 +464,7 @@ class Crystal(): [+1,+1,+1, -3,+2,+1], [+1,+1,-1, +3,-2,+1], [+1,-1,+1, +3,+2,-1]])], - 'twin' :[np.array([ + 'twin': [np.array([ [-1, 1, 1, 2, 1, 1], [ 1, 1, 1, -2, 1, 1], [ 1, 1,-1, 2,-1, 1], @@ -479,7 +479,7 @@ class Crystal(): [ 1, 1, 1, 1, 1,-2]])] }, 'hP': { - 'slip' :[np.array([ + 'slip': [np.array([ [+2,-1,-1,+0, +0,+0,+0,+1], [-1,+2,-1,+0, +0,+0,+0,+1], [-1,-1,+2,+0, +0,+0,+0,+1]]), @@ -514,7 +514,7 @@ class Crystal(): [+1,+1,-2,+3, -1,-1,+2,+2], [-1,+2,-1,+3, +1,-2,+1,+2], [-2,+1,+1,+3, +2,-1,-1,+2]])], - 'twin' :[np.array([ + 'twin': [np.array([ [-1, 0, 1, 1, 1, 0,-1, 2], # shear = (3-(c/a)^2)/(sqrt(3) c/a) <-10.1>{10.2} [ 0,-1, 1, 1, 0, 1,-1, 2], [ 1,-1, 0, 1, -1, 1, 0, 2], @@ -542,7 +542,74 @@ class Crystal(): [-1,-1, 2,-3, -1,-1, 2, 2], [ 1,-2, 1,-3, 1,-2, 1, 2], [ 2,-1,-1,-3, 2,-1,-1, 2]])] - }, + }, + 'tI': { + 'slip': [np.array([ + [+0,+0,+1, +1,+0,+0], + [+0,+0,+1, +0,+1,+0]]), + np.array([ + [+0,+0,+1, +1,+1,+0], + [+0,+0,+1, -1,+1,+0]]), + np.array([ + [+0,+1,+0, +1,+0,+0], + [+1,+0,+0, +0,+1,+0]]), + np.array([ + [+1,-1,+1, +1,+1,+0], + [+1,-1,-1, +1,+1,+0], + [-1,-1,-1, -1,+1,+0], + [-1,-1,+1, -1,+1,+0]]), + np.array([ + [+1,-1,+0, +1,+1,+0], + [+1,+1,+0, +1,-1,+0]]), + np.array([ + [+0,+1,+1, +1,+0,+0], + [+0,-1,+1, +1,+0,+0], + [-1,+0,+1, +0,+1,+0], + [+1,+0,+1, +0,+1,+0]]), + np.array([ + [+0,+1,+0, +0,+0,+1], + [+1,+0,+0, +0,+0,+1]]), + np.array([ + [+1,+1,+0, +0,+0,+1], + [-1,+1,+0, +0,+0,+1]]), + np.array([ + [+0,+1,-1, +0,+1,+1], + [+0,-1,-1, +0,-1,+1], + [-1,+0,-1, -1,+0,+1], + [+1,+0,-1, +1,+0,+1]]), + np.array([ + [+1,-1,+1, +0,+1,+1], + [+1,+1,-1, +0,+1,+1], + [+1,+1,+1, +0,+1,-1], + [-1,+1,+1, +0,+1,-1], + [+1,-1,-1, +1,+0,+1], + [-1,-1,+1, +1,+0,+1], + [+1,+1,+1, +1,+0,-1], + [+1,-1,+1, +1,+0,-1]]), + np.array([ + [+1,+0,+0, +0,+1,+1], + [+1,+0,+0, +0,+1,-1], + [+0,+1,+0, +1,+0,+1], + [+0,+1,+0, +1,+0,-1]]), + np.array([ + [+0,+1,-1, +2,+1,+1], + [+0,-1,-1, +2,-1,+1], + [+1,+0,-1, +1,+2,+1], + [-1,+0,-1, -1,+2,+1], + [+0,+1,-1, -2,+1,+1], + [+0,-1,-1, -2,-1,+1], + [-1,+0,-1, -1,-2,+1], + [+1,+0,-1, +1,-2,+1]]), + np.array([ + [-1,+1,+1, +2,+1,+1], + [-1,-1,+1, +2,-1,+1], + [+1,-1,+1, +1,+2,+1], + [-1,-1,+1, -1,+2,+1], + [+1,+1,+1, -2,+1,+1], + [+1,-1,+1, -2,-1,+1], + [-1,+1,+1, -1,-2,+1], + [+1,+1,+1, +1,-2,+1]])] + } } master = _kinematics[self.lattice][mode] if self.lattice == 'hP': diff --git a/python/tests/test_Crystal.py b/python/tests/test_Crystal.py index 90fbdce74..9c6de965d 100644 --- a/python/tests/test_Crystal.py +++ b/python/tests/test_Crystal.py @@ -79,3 +79,23 @@ class TestCrystal: a=a,b=b,c=c, alpha=alpha,beta=beta,gamma=gamma) assert np.allclose(points,c.lattice_points) + + @pytest.mark.parametrize('crystal,length', + [(Crystal(lattice='cF'),[12,6]), + (Crystal(lattice='cI'),[12,12,24]), + (Crystal(lattice='hP'),[3,3,6,12,6]), + (Crystal(lattice='tI',c=1.2),[2,2,2,4,2,4,2,2,4,8,4,8,8]) + ]) + def test_N_slip(self,crystal,length): + assert [len(s) for s in crystal.kinematics('slip')['direction']] == length + assert [len(s) for s in crystal.kinematics('slip')['plane']] == length + + @pytest.mark.parametrize('crystal,length', + [(Crystal(lattice='cF'),[12]), + (Crystal(lattice='cI'),[12]), + (Crystal(lattice='hP'),[6,6,6,6]), + ]) + def test_N_twin(self,crystal,length): + assert [len(s) for s in crystal.kinematics('twin')['direction']] == length + assert [len(s) for s in crystal.kinematics('twin')['plane']] == length +