def test_tangent(self): shape = [2, 3] Eps = np.random.random(shape + [2, 2]) Eps = tensor.A4_ddot_B2(tensor.Array2d(shape).I4s, Eps) mat = GMat.Elastic2d(np.random.random(shape), np.random.random(shape)) mat.Eps = Eps self.assertTrue(np.allclose(tensor.A4_ddot_B2(mat.C, mat.Eps), mat.Sig))
def test_Elastic(self): shape = [2, 3] K = np.random.random(shape) G = np.random.random(shape) mat = GMat.Elastic2d(K, G) gamma = np.random.random(shape) epsm = np.random.random(shape) mat.Eps[..., 0, 0] = epsm mat.Eps[..., 1, 1] = epsm mat.Eps[..., 0, 1] = gamma mat.Eps[..., 1, 0] = gamma mat.refresh() Sig = np.empty(shape + [2, 2]) Sig[..., 0, 0] = K * epsm Sig[..., 1, 1] = K * epsm Sig[..., 0, 1] = G * gamma Sig[..., 1, 0] = G * gamma self.assertTrue(np.allclose(GMat.Epsd(mat.Eps), gamma)) self.assertTrue(np.allclose(GMat.Sigd(mat.Sig), 2 * G * gamma)) self.assertTrue(np.allclose(mat.Sig, Sig)) self.assertTrue(np.allclose(tensor.A4_ddot_B2(mat.C, mat.Eps), Sig)) self.assertTrue(np.allclose(mat.energy, K * epsm**2 + G * gamma**2)) self.assertTrue(np.allclose(mat.K, K)) self.assertTrue(np.allclose(mat.G, G))
data["/elastic/epsy"] = epsy for m in mat: mat[m]["is_tensor2"] = np.zeros(shape + [2, 2], bool) mat[m]["is_tensor4"] = np.zeros(shape + [2, 2, 2, 2], bool) mat[m]["is_tensor2"] += (mat[m]["is"]).reshape(shape + [1, 1]) mat[m]["is_tensor4"] += (mat[m]["is"]).reshape(shape + [1, 1, 1, 1]) I4s = tensor.Array2d(shape).I4s for i in range(20): GradU = 200 * np.random.random(shape + [2, 2]) data[f"/random/{i:d}/GradU"] = GradU Eps = tensor.A4_ddot_B2(I4s, GradU) for m in mat: mat[m]["mat"].Eps = Eps[mat[m]["is_tensor2"]].reshape(-1, 2, 2) Sig[mat[m]["is_tensor2"]] = mat[m]["mat"].Sig.reshape(-1) C[mat[m]["is_tensor4"]] = mat[m]["mat"].C.reshape(-1) if m == "Elastic1d": continue index[mat[m]["is"]] = mat[m]["mat"].i epsy_left[mat[m]["is"]] = mat[m]["mat"].epsy_left epsy_right[mat[m]["is"]] = mat[m]["mat"].epsy_right data[f"/random/{i:d}/Stress"] = Sig data[f"/random/{i:d}/Tangent"] = C data[f"/random/{i:d}/CurrentIndex"] = index data[f"/random/{i:d}/CurrentYieldLeft"] = epsy_left