class MaterialTest(unittest.TestCase): def setUp(self): mu, kappa, rho = sp.rand(3) A10 = mu / 2 A01 = 0 F = sp.rand(3, 3) self.E = 1 / 2 * (F.T @ F - sp.eye(3)) self.mooney = MooneyRivlin(A10, A01, kappa, rho) self.neo = NeoHookean(mu, kappa, rho) def test_Neo_vs_Mooney_S(self): S_mooney, Sv_mooney, C_mooney = self.mooney.S_Sv_and_C(self.E) S_neo, Sv_neo, C_neo = self.neo.S_Sv_and_C(self.E) np.testing.assert_allclose(S_mooney, S_neo) def test_Neo_vs_Mooney_Sv(self): S_mooney, Sv_mooney, C_mooney = self.mooney.S_Sv_and_C(self.E) S_neo, Sv_neo, C_neo = self.neo.S_Sv_and_C(self.E) np.testing.assert_allclose(Sv_mooney, Sv_neo) def test_Neo_vs_Mooney_C(self): S_mooney, Sv_mooney, C_mooney = self.mooney.S_Sv_and_C(self.E) S_neo, Sv_neo, C_neo = self.neo.S_Sv_and_C(self.E) np.testing.assert_allclose(C_mooney, C_neo)
class MaterialTest2dPlaneStress(unittest.TestCase): def setUp(self): F = sp.zeros((3, 3)) F[:2, :2] = sp.rand(2, 2) F[2, 2] = 1 self.E = 1 / 2 * (F.T @ F - sp.eye(3)) A10, A01, kappa, rho = sp.rand(4) mu = A10 * 2 self.mooney = MooneyRivlin(A10, A01, kappa, rho, plane_stress=False) self.neo = NeoHookean(mu, kappa, rho, plane_stress=False) def test_mooney_2d(self): E = self.E S, S_v, C = self.mooney.S_Sv_and_C(E) S2d, S_v2d, C2d = self.mooney.S_Sv_and_C_2d(E[:2, :2]) np.testing.assert_allclose(S[:2, :2], S2d) np.testing.assert_allclose(C[np.ix_([0, 1, -1], [0, 1, -1])], C2d) def test_neo_2d(self): E = self.E S, S_v, C = self.neo.S_Sv_and_C(E) S2d, S_v2d, C2d = self.neo.S_Sv_and_C_2d(E[:2, :2]) np.testing.assert_allclose(S[:2, :2], S2d) np.testing.assert_allclose(C[np.ix_([0, 1, -1], [0, 1, -1])], C2d)