def setUp(self): self.A = np.array([[4.1,2.8,-1.2],[3.1,7.1,0.2],[4,2,3]]) self.TA = tensors.RankTwo(self.A) self.B = np.array([[10.2,-9.3,2.5],[0.1,3.1,2.8],[0.1,3.2,-6.1]]) self.TB = tensors.RankTwo(self.B) self.a = np.array([2.2,-1.2,2.5]) self.va = tensors.Vector(self.a) self.s = 2.1
def setUp(self): self.scalar = 2.5 self.vector = tensors.Vector(np.array([1.0, 2.0, 3.0])) self.ranktwo = tensors.RankTwo( np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]])) self.symmetric = tensors.Symmetric(np.eye(3)) q = np.array([[1.0, 2.0, 3.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]]) q = 0.5 * (q - q.T) self.skew = tensors.Skew(q) self.orientation = rotations.Orientation(30.0, 60.0, 80.0, angle_type="degrees") self.hist1 = history.History() self.hist2 = history.History(store=False) self.add_all(self.hist1) self.add_all(self.hist2) self.storage = np.zeros((self.hist2.size, )) self.hist2.set_data(self.storage) self.set_all(self.hist1) self.set_all(self.hist2)
def test_full_normal(self): v = tensors.Vector([0, 1.0, 0]) P = projections.normal_projection(v) proj = P.dot(self.s_full) self.assertEqual( proj, tensors.RankTwo(np.array([[0, 0, 0], [0, 5, 0], [0, 0, 0]])))
def test_full_shear(self): v = tensors.Vector([0, 1.0, 0]) P = projections.shear_projection(v) proj = P.dot(self.s_full) self.assertEqual( proj, tensors.RankTwo(np.array([[0, 2, 0], [0, 0, 0], [0, 8, 0]])))
def setUp(self): self.S = np.array([[4.1,2.8,-1.2],[3.1,7.1,0.2],[4,2,3]]) self.S = 0.5*(self.S + self.S.T) self.TS = tensors.Symmetric(self.S) self.G = np.array([[10.2,-9.3,2.5],[0.1,3.1,2.8],[0.1,3.2,-6.1]]) self.TG = tensors.RankTwo(self.G) self.W = np.array([[-5.0,7.1,1.0],[-0.2,0.25,1.2],[-0.4,0.4,-2]]) self.W = 0.5*(self.W - self.W.T) self.TW = tensors.Skew(self.W)
def setUp(self): self.q = rotations.Orientation(30.0, 60.0, 80.0, angle_type = "degrees") self.Q = self.q.to_matrix() self.v = np.array([1.2,-2.0,3.0]) self.Tv = tensors.Vector(self.v) self.A = np.array([[4.1,2.8,-1.2],[3.1,7.1,0.2],[4,2,3]]) self.TA = tensors.RankTwo(self.A) self.S = np.array([[4.1,2.8,-1.2],[3.1,7.1,0.2],[4,2,3]]) self.S = 0.5*(self.S + self.S.T) self.TS = tensors.Symmetric(self.S) self.W = np.array([[4.1,2.8,-1.2],[3.1,7.1,0.2],[4,2,3]]) self.W = 0.5*(self.W - self.W.T) self.TW = tensors.Skew(self.W) self.R1 = np.array([[[[ 7.09627147, 9.22330744, -1.36602973], [-7.86118175, -1.6342633 , -5.75516189], [ 2.61734248, 6.40678382, 3.37981603]], [[ 5.65100254, -7.88797059, 7.31396665], [-6.35471595, 5.67698069, -8.18795178], [ 9.10447016, 8.91183436, -6.65254333]], [[ 3.20429862, 2.99308849, 4.0035241 ], [-4.02440197, -4.39975872, -4.33542791], [ 9.36746226, -2.91156335, 4.51572032]]], [[[-9.23675199, 8.63546962, 6.83448027], [ 4.35044123, 2.24508666, 9.80054664], [ 0.30835223, -4.05208575, 5.68966326]], [[ 6.40300092, -8.25998136, 5.63566553], [-5.02801101, 5.64005224, -7.39586166], [ 5.90893633, 6.02074669, 1.37112738]], [[-2.68485216, -4.67660156, 3.52618441], [-2.52484812, -0.08561168, 3.39072868], [ 9.11295675, 2.63102786, -4.82285415]]], [[[ 8.31973154, 4.76081593, 4.38377207], [ 6.22896742, -3.83995097, 5.37501029], [-0.16770967, 7.9453854 , -4.95548491]], [[-5.67884611, -8.44970885, -7.42037867], [-5.19908193, -7.87006493, 1.65949787], [-3.25934672, 6.27340198, 5.98643056]], [[-4.20166968, -2.38276224, 3.04551936], [ 3.68445989, -5.84357996, 3.61183543], [ 1.54886677, 3.3659842 , 6.43067337]]]]) self.TR1 = tensors.RankFour(self.R1) self.SS1 = np.array([ [ 5.99159801, -2.24342348, 0.26667281, -0.95466199, 3.98931478, -0.10846981], [ 1.86468226, -4.32391908, -7.82738638, -7.45008989, 5.89874777, 0.45820648], [-5.92565398, 2.4862829 , -6.02112389, 6.75455965, 4.65183463, 9.96900579], [ 0.60378883, -3.72189328, -7.63388446, -5.76559403, -0.3119789 , -1.1527258 ], [ 4.56813135, -6.06783828, -6.18341368, 8.06169686, -9.56928844, 9.08114655], [-8.25516614, 6.30663846, 7.2084381 , -7.38280703, -5.96279902, 8.9935982 ]]) self.SSS1 = ms2ts(self.SS1) self.TSS1 = tensors.SymSymR4(self.SS1)
def setUp(self): self.scalar = 2.5 self.vector = tensors.Vector(np.array([1.0, 2.0, 3.0])) self.ranktwo = tensors.RankTwo( np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]])) self.symmetric = tensors.Symmetric(np.eye(3)) q = np.array([[1.0, 2.0, 3.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]]) q = 0.5 * (q - q.T) self.skew = tensors.Skew(q) self.hist = history.History() self.add_all(self.hist) self.set_all(self.hist)
def setUp(self): self.L = crystallography.CubicLattice(1.0) self.L.add_slip_system([1, 1, 0], [1, 1, 1]) self.Q = rotations.Orientation(35.0, 17.0, 14.0, angle_type="degrees") self.S = tensors.Symmetric( np.array([[100.0, -25.0, 10.0], [-25.0, -17.0, 15.0], [10.0, 15.0, 35.0]])) self.strength_0 = 35.0 self.strength_1 = -5.0 self.H = history.History() self.H.add_scalar("strength0") self.H.set_scalar("strength0", self.strength_0) self.H.add_scalar("strength1") self.H.set_scalar("strength1", self.strength_1) self.T = 300.0 self.tau0_1 = 10.0 self.tau_sat_1 = 50.0 self.b_1 = 2.5 self.tau0_2 = 5.0 self.tau_sat_2 = -25.0 self.b_2 = 1.5 self.static = self.tau0_1 + self.tau0_2 self.strength = self.strength_0 + self.strength_1 self.model1 = slipharden.VoceSlipHardening(self.tau_sat_1, self.b_1, self.tau0_1) self.model2 = slipharden.VoceSlipHardening(self.tau_sat_2, self.b_2, self.tau0_2) self.model = slipharden.SumSlipSingleStrengthHardening( [self.model1, self.model2]) self.g0 = 1.0 self.n = 3.0 self.sliprule = sliprules.PowerLawSlipRule(self.model, self.g0, self.n) self.fixed = history.History() self.nye = tensors.RankTwo([[1.1, 1.2, 1.3], [2.1, 2.2, 2.3], [3.1, 3.2, 3.3]]) self.nye_part = 0.0
def setUp(self): self.vname = "strength" self.L = crystallography.CubicLattice(1.0) self.L.add_slip_system([1, 1, 0], [1, 1, 1]) self.Q = rotations.Orientation(35.0, 17.0, 14.0, angle_type="degrees") self.S = tensors.Symmetric( np.array([[100.0, -25.0, 10.0], [-25.0, -17.0, 15.0], [10.0, 15.0, 35.0]])) self.strength = 35.0 self.H = history.History() self.H.add_scalar("strength") self.H.set_scalar("strength", self.strength) self.T = 300.0 self.tau0 = 10.0 self.tau_sat = 50.0 self.b = 2.5 self.static = self.tau0 self.k = 1.2 self.model = slipharden.VoceSlipHardening(self.tau_sat, self.b, self.tau0, k=self.k) self.g0 = 1.0 self.n = 3.0 self.sliprule = sliprules.PowerLawSlipRule(self.model, self.g0, self.n) self.nye = tensors.RankTwo([[1.1, 1.2, 1.3], [2.1, 2.2, 2.3], [3.1, 3.2, 3.3]]) self.nye_part = self.k * np.sqrt( la.norm(self.nye.data.reshape((3, 3)), ord='fro')) self.fixed = history.History() self.fixed.add_ranktwo("nye") self.fixed.set_ranktwo("nye", self.nye)
def setUp(self): self.vname = "wee" self.L = crystallography.CubicLattice(1.0) self.L.add_slip_system([1, 1, 0], [1, 1, 1]) self.Q = rotations.Orientation(35.0, 17.0, 14.0, angle_type="degrees") self.S = tensors.Symmetric( np.array([[100.0, -25.0, 10.0], [-25.0, -17.0, 15.0], [10.0, 15.0, 35.0]])) self.strength = 35.0 self.H = history.History() self.H.add_scalar(self.vname) self.H.set_scalar(self.vname, self.strength) self.T = 300.0 self.tau0 = 10.0 self.tau_sat = 50.0 self.b = 2.5 self.static = self.tau0 self.model = slipharden.VoceSlipHardening(self.tau_sat, self.b, self.tau0) self.model.set_varnames([self.vname]) self.g0 = 1.0 self.n = 3.0 self.sliprule = sliprules.PowerLawSlipRule(self.model, self.g0, self.n) self.fixed = history.History() self.nye = tensors.RankTwo([[1.1, 1.2, 1.3], [2.1, 2.2, 2.3], [3.1, 3.2, 3.3]]) self.nye_part = 0.0
def test_outer(self): self.assertEqual(self.va.outer(self.vb), tensors.outer(self.va, self.vb)) self.assertEqual(tensors.RankTwo(np.outer(self.a, self.b)), tensors.outer(self.va, self.vb))
def test_product_symmetric(self): self.assertEqual(tensors.RankTwo(np.einsum('ijkl,kl', self.WS1_full, self.S)), self.TWS1 * self.TS)
def test_product_skew(self): self.assertEqual(tensors.RankTwo(np.einsum('ijkl,kl', self.WS1_full, self.W)), self.TWS1 * self.TW)
def test_product_general(self): self.assertEqual(tensors.RankTwo(np.einsum('ijkl,kl', self.SW1_full, self.G)), self.TSW1 * self.TG)
def setUp(self): self.WS1 = np.array([ [-8.3567359 , -5.39728818, -8.00844442, -8.33365112, -0.97903364, -8.23943149], [-6.97125417, 4.34802055, 7.06281056, -1.57511617, 7.83359933, -9.37625432], [-6.0799489 , -6.0309543 , 3.68575895, 8.84296976, 6.55799427, -9.22029379]]) self.WS1_full = common.wws2ts(self.WS1) self.TWS1 = tensors.SkewSymR4(self.WS1) self.WS2 = np.array([ [-8.80662663, 0.46179936, -5.49454144, 7.91618428, 5.34053953, -6.68997405], [ 4.15874971, -4.59781751, 7.43746813, 8.99981425, -0.97692573, 2.5075246 ], [ 9.53201007, -8.03524224, 0.94329443, -6.44415877, -9.92911741, 3.51742689]]) self.WS2_full = common.wws2ts(self.WS2) self.TWS2 = tensors.SkewSymR4(self.WS2) self.SW = np.array([ [ 5.43434005, -6.55983214, 0.29737664], [-4.77472172, -8.51287287, -3.19380185], [ 4.43407952, -6.02555614, 5.87786914], [ 1.89488869, -5.65383917, 8.83717547], [-7.18030867, 1.56100537, -9.83238641], [-4.52369317, -3.07284914, -7.54966999]]) self.SW_full = common.ws2ts(self.SW) self.TSW = tensors.SymSkewR4(self.SW) self.SS = np.array([ [ 5.99159801, -2.24342348, 0.26667281, -0.95466199, 3.98931478, -0.10846981], [ 1.86468226, -4.32391908, -7.82738638, -7.45008989, 5.89874777, 0.45820648], [-5.92565398, 2.4862829 , -6.02112389, 6.75455965, 4.65183463, 9.96900579], [ 0.60378883, -3.72189328, -7.63388446, -5.76559403, -0.3119789 , -1.1527258 ], [ 4.56813135, -6.06783828, -6.18341368, 8.06169686, -9.56928844, 9.08114655], [-8.25516614, 6.30663846, 7.2084381 , -7.38280703, -5.96279902, 8.9935982 ]]) self.SS_full = common.ms2ts(self.SS) self.TSS = tensors.SymSymR4(self.SS) self.R = np.array([[[[-8.03675620e+00, 2.58575052e+00, 2.44069661e+00], [ 4.75021663e+00, 1.24463394e+00, -8.69751301e-01], [-1.46310894e+00, -1.15053235e+00, -3.75342982e+00]], [[-7.64033956e+00, 4.19956720e+00, -4.87644982e+00], [ 1.06577507e+00, 8.94272637e+00, 6.57264250e-01], [-4.22613258e+00, -5.08830314e+00, 1.57718186e+00]], [[-4.02243082e+00, -4.75463781e+00, -8.88662152e+00], [-1.30383950e+00, -1.98063574e+00, -3.18963544e+00], [-7.52071674e+00, 1.08931933e+00, 2.86988431e+00]]], [[[ 5.28621060e+00, -6.83799668e+00, 8.98005935e+00], [-7.92741122e+00, 5.75699425e-01, 1.66782544e+00], [ 2.60041984e+00, -1.04476986e-02, -6.12424787e+00]], [[-3.73727368e+00, 6.59764771e+00, -1.18045587e+00], [ 4.08567441e+00, 2.66148943e+00, -6.82495588e-01], [-1.64417262e+00, 5.33119298e+00, 8.11045988e-03]], [[-5.90193883e+00, -2.63316107e+00, 5.61381825e+00], [-6.08591194e+00, 8.77285539e+00, -7.15230533e+00], [ 3.15093096e+00, 1.41350149e+00, 1.11702016e+00]]], [[[-9.61472764e-01, -1.91492497e+00, 9.48275324e+00], [ 6.68841134e+00, 3.23412041e+00, -3.41944541e+00], [-9.80203467e+00, 6.58425335e+00, -2.16548636e+00]], [[ 6.63950740e+00, 3.91551441e+00, -8.98229111e+00], [ 9.84606756e+00, -8.16145090e+00, 8.41929062e-01], [-1.93839620e+00, 7.44485127e+00, -2.70832414e+00]], [[ 9.79265531e+00, -1.18212395e+00, -5.39433704e+00], [ 4.87152614e+00, 9.47287450e+00, 5.53838514e+00], [ 9.30443367e+00, 1.27090319e+00, 1.60409739e+00]]]]) self.TR = tensors.RankFour(self.R) self.S = np.array([[4.1,2.8,-1.2],[3.1,7.1,0.2],[4,2,3]]) self.S = 0.5*(self.S + self.S.T) self.TS = tensors.Symmetric(self.S) self.scalar = 5.2 self.G = np.array([[ 9.50640677, 1.79084726, -2.8877036 ], [-1.63159958, 2.52866904, -8.71585042], [ 5.01859685, -8.7324075 , -0.42919134]]) self.TG = tensors.RankTwo(self.G) self.W = np.array([[-9.36416517, 2.95527444, 8.70983194], [-1.54693052, 8.7905658 , -5.10895168], [-8.52740468, -0.7741642 , 2.89544992]]) self.W = 0.5 * (self.W - self.W.T) self.TW = tensors.Skew(self.W)
def test_add_general_sym(self): self.assertEqual(tensors.RankTwo(self.G + self.S), self.TG + self.TS)
def test_skew(self): self.assertEqual(tensors.RankTwo(np.einsum('ijkl,kl', self.R1, self.W)), self.TR1 * self.TW)
def test_sub_general_skew(self): self.assertEqual(tensors.RankTwo(self.G - self.W), self.TG - self.TW)
def test_ranktwo(self): self.assertEqual(tensors.RankTwo(np.einsum('ijkl,kl', self.R1, self.G)), self.TR1 * self.TG)
def test_sym_skew(self): self.assertEqual(tensors.RankTwo(np.dot(self.S, self.W)), self.TS * self.TW)
def test_skew_sym(self): self.assertEqual(tensors.RankTwo(np.dot(self.W, self.S)), self.TW * self.TS)
def test_sub_sym_general(self): self.assertEqual(tensors.RankTwo(self.S - self.G), self.TS - self.TG)
def test_add_general_skew(self): self.assertEqual(tensors.RankTwo(self.G + self.W), self.TG + self.TW)
def test_add_skew_general(self): self.assertEqual(tensors.RankTwo(self.W + self.G), self.TW + self.TG)
def test_general_skew(self): self.assertEqual(tensors.RankTwo(np.dot(self.G, self.W)), self.TG * self.TW)
def test_symmetric(self): self.assertEqual(tensors.RankTwo(np.einsum('ijkl,kl', self.R1, self.S)), self.TR1 * self.TS)
def test_apply_ranktwo(self): self.assertEqual(self.q.apply(self.TA), tensors.RankTwo(np.dot(self.Q, np.dot(self.A, self.Q.T))))
def test_add_sym_general(self): self.assertEqual(tensors.RankTwo(self.S + self.G), self.TS + self.TG)
def test_sub_general_sym(self): self.assertEqual(tensors.RankTwo(self.G - self.S), self.TG - self.TS)
def test_sub_skew_general(self): self.assertEqual(tensors.RankTwo(self.W - self.G), self.TW - self.TG)